Java 带有打包依赖项的Maven构建jar
我在构建一个可运行的jar(包含我所需的所有依赖项)时遇到问题。我可以构建一个包含所有依赖项的JAR,它可以工作,但速度非常慢(我使用Eclipse导出构建它)。我尝试使用maven汇编插件Java 带有打包依赖项的Maven构建jar,java,maven,executable-jar,maven-assembly-plugin,maven-shade-plugin,Java,Maven,Executable Jar,Maven Assembly Plugin,Maven Shade Plugin,我在构建一个可运行的jar(包含我所需的所有依赖项)时遇到问题。我可以构建一个包含所有依赖项的JAR,它可以工作,但速度非常慢(我使用Eclipse导出构建它)。我尝试使用maven汇编插件 <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>${mainClass}</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
maven汇编插件
${mainClass}
带有依赖项的jar
组装
包裹
单一的
这将创建一个包含所有未打包依赖项的Jar。问题是,当我运行结果jar时,它会抛出一个错误(我在代码中得到一个null指针异常,这似乎是由其中一个包含的库中的工厂类返回null引起的)
问题似乎是,当一个依赖jar被取消打包以包含到我的jar中时,出现了一些错误(因此出现了错误)。我想把那个罐子打包好,但仍然把它放在我的可运行的罐子里
有没有一种方法可以选择性地包括包装好的罐子(或者包括所有包装好的罐子)?我不知道,如果我理解正确的话
- 你所有的罐子都不会被打开
- 您可以使用onejar插件创建一个嵌入了所有jar的jar
org.apache.maven.plugins
maven依赖插件
2.10
com.joira
onejar maven插件
1.4.4
${mainclass}
真的
${project.artifactId}-${project.version}-jar与依赖项。${project.packaging}
一罐
- 可以在依赖项部分排除JAR
...
...
...
...
...
我不知道,如果我理解正确的话
- 你所有的罐子都不会被打开
- 您可以使用onejar插件创建一个嵌入了所有jar的jar
org.apache.maven.plugins
maven依赖插件
2.10
com.joira
onejar maven插件
1.4.4
${mainclass}
真的
${project.artifactId}-${project.version}-jar与依赖项。${project.packaging}
一罐
- 可以在依赖项部分排除JAR
...
...
...
...
...
或者您可以排除不需要的罐子?您想在打包(所有依赖项包)时排除其中一个依赖项jar,但不想将其从pom中排除?也可以进行选择性包含:问题似乎是,当其中一个依赖项jar未打包以包含到我的jar中时,出现了问题(因此出现了错误)。我想把那个罐子打包好,但仍然放在我的可运行的罐子里,或者你可以排除不需要的罐子?您想在打包(所有依赖项包)时排除其中一个依赖项jar,但不想将其从pom中排除?也可以进行选择性包含:问题似乎是,当其中一个依赖项jar未打包以包含到我的jar中时,出现了问题(因此出现了错误)。我想把这个jar打包好,但它仍然在我的可运行jar中。我避免使用一个jar,因为自2012年以来它似乎就不受支持。我的看法错了吗?是的,你是对的。另一种选择(不是真的)是使用带有描述符的汇编插件(参见上面的第一个链接)。但这需要一些东西来加载类\jar,因为类路径
不指向jar中的jar。我避免使用一个jar,因为自2012年以来它似乎不受支持。我的看法错了吗?是的,你是对的。另一种选择(不是真的)是使用带有描述符的汇编插件(参见上面的第一个链接)。但是这需要加载类\jar,因为类路径
不指向jar中的jar。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
</plugin>
<plugin>
<groupId>com.jolira</groupId>
<artifactId>onejar-maven-plugin</artifactId>
<version>1.4.4</version>
<executions>
<execution>
<configuration>
<mainClass>${mainclass}</mainClass>
<attachToBuild>true</attachToBuild>
<filename>${project.artifactId}-${project.version}-jar-with-dependencies.${project.packaging}</filename>
</configuration>
<goals>
<goal>one-jar</goal>
</goals>
</execution>
</executions>
</plugin>
<dependency>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<exclusions>
<exclusion>
<groupId>...</groupId>
<artifactId>...</artifactId>
</exclusion>
</exclusions>