有没有办法强制maven(2.0.9)将所有依赖项包含在一个jar文件中?
我有一个项目的构建到一个单一的jar文件。我希望依赖的类也能复制到jar中。
更新:我知道我不能只在jar文件中包含一个jar文件。我正在寻找一种方法来解包指定为依赖项的jar,并将类文件打包到我的jar中。
有没有办法强制maven(2.0.9)将所有依赖项包含在一个jar文件中?
我有一个项目的构建到一个单一的jar文件。我希望依赖的类也能复制到jar中。
更新:我知道我不能只在jar文件中包含一个jar文件。我正在寻找一种方法来解包指定为依赖项的jar,并将类文件打包到我的jar中。
当前回答
为了使它更简单,你可以使用下面的插件。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<classifier>spring-boot</classifier>
<mainClass>
com.nirav.certificate.CertificateUtility
</mainClass>
</configuration>
</execution>
</executions>
</plugin>
其他回答
把Maven放在一边,您可以把JAR库放在Main JAR中,但是您需要使用自己的类加载器。
检查这个项目:One-JAR链接文本
为了使它更简单,你可以使用下面的插件。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<classifier>spring-boot</classifier>
<mainClass>
com.nirav.certificate.CertificateUtility
</mainClass>
</configuration>
</execution>
</executions>
</plugin>
我发现这是最明确的答案;这里的其他答案是缺少一些对我来说不明显的东西,例如MVN清洁包命令,以及单独添加插件作为依赖项。所有这些对于更习惯的专业用户来说可能是显而易见的。
https://howtodoinjava.com/maven/executable-jar-with-dependencies/
在Maven2中,正确的方法是使用Maven2 Assembly Plugin,它有一个预定义的描述符文件,你可以在命令行中使用:
mvn assembly:assembly -DdescriptorId=jar-with-dependencies
如果你想让这个jar文件可执行,只需要在插件配置中添加要运行的主类:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>my.package.to.my.MainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
如果你想要创建程序集作为正常构建过程的一部分,你应该将单个或单目录目标(程序集目标应该只从命令行运行)绑定到生命周期阶段(包是有意义的),就像这样:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>create-my-bundle</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
...
</configuration>
</execution>
</executions>
</plugin>
调整配置元素以满足您的需求(例如使用清单内容)。
这篇文章可能有点老了,但我最近也有同样的问题。John Stauffer提出的第一个解决方案很好,但我在今年春天工作时遇到了一些问题。我使用的spring依赖jar有一些属性文件和xml模式声明,它们共享相同的路径和名称。尽管这些jar来自相同的版本,但jar-with-dependencies maven-goal正在用最后找到的文件覆盖这些文件。
最后,由于spring jar找不到正确的属性文件,应用程序无法启动。在这种情况下,罗普提出的解决方案已经解决了我的问题。
也是从那时起,spring-boot项目现在就存在了。它有一种非常酷的方法来管理这个问题,即提供一个maven目标,该目标重载包目标并提供自己的类装入器。参见弹簧靴参考指南