【问题标题】:How to create executable jar with maven and system dependencies?如何使用 Maven 和系统依赖项创建可执行 jar?
【发布时间】:2021-09-12 13:56:51
【问题描述】:

在我的 maven 项目中,我的系统依赖项很少,如下所示:

<dependency>
    <groupId>Com.myCompany</groupId>
    <artifactId>myArtifact</artifactId>
    <scope>system</scope>
    <version>1.0</version>
    <systemPath>${project.basedir}\lib\myArtifact-1.0.jar</systemPath>
</dependency>

我正在尝试创建一个包含所有必需依赖项的可执行 jar [fat jar],以便该 jar 可以独立运行。

我正在使用“maven-assembly-plugin”以这种方式进行打包:

<plugin>
    <artifactId>maven-assembly-plugin<artifactId>
    <configuration>
        <archive>
            <manifest>
                <addClasspath>true<addClasspath>
                <mainClass>com.mycompany.Application</mainClass>
            </manifest>
         </archive>
         <descriptorRefs>
             <descriptorRef>jar-with-dependencies</descriptorRef>
         </descriptorRefs>
    </configuration>
    <executions>
        <execution>
            <id>jar-with-dependencies</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

问题是创建包时系统依赖项不包含在 jar 中,我在运行它时遇到 ClassNotFound 异常。

有人可以指导我正确的配置方式吗?

更新:

正如很少有人提到的那样,我可以将依赖项安装到本地存储库。这里的问题是我们有一个自动构建服务器,当我们提交到 repo 时它会被触发。我真的不想在远程构建服务器上安装它们。

【问题讨论】:

  • 为什么不先将系统依赖安装到本地仓库?
  • 要详细说明@JFabianMeier,请参阅此answer
  • 系统范围依赖从何而来?这不会默认与 maven-assembly-plugin 打包(需要补充配置)...
  • @khmarbaise 感谢您的回复。这些依赖来自项目目录,即文件系统。

标签: java maven build executable-jar


【解决方案1】:

深入挖掘,发现这个 hacky 配置(不推荐!!)

在 maven 程序集插件中引用这个 xml:

<configuration>   
    <appendAssemblyId>false</appendAssemblyId>   
    <descriptors>     
        <descriptor>${basedir}/assembly.xml</descriptor>   
    </descriptors> 
</configuration>
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
<id>jar-with-all-dependencies</id>
<formats>
    <format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
    <dependencySet>
        <outputDirectory>/</outputDirectory>
        <useProjectArtifact>true</useProjectArtifact>
        <unpack>true</unpack>
        <scope>runtime</scope>
    </dependencySet>
    <dependencySet>
        <outputDirectory>/</outputDirectory>
        <unpack>true</unpack>
        <scope>system</scope>
    </dependencySet>
</dependencySets>

 </assembly>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-04
    相关资源
    最近更新 更多