将jar打包到具有独立外部资源和依赖关系的dist目录中
这是我想要实现的 – 一个dist
目录(或一个zip文件),如下所示:
dist/ |-- application-1.0.jar |-- conf/ |-- application.properties |-- log4j.properties |-- lib/ |-- *.jar
基本上:
- 生成一个可执行jar(清单中有适当的类路径)
- 我想排除
src/main/resources
与jar自动打包,以便可以修改application.properties
- 我想在
lib/
目录中有外部依赖项
我想出了一个使用配置文件的解决方案,其中包含附加到包阶段的插件,但使用组件插件是一个更好的解决方案吗?
使用程序集插件的解决方案有几个部分:
- pom包括配置jar插件(
maven-jar-plugin
)和配置程序集插件(maven-assembly-plugin
)。 - 在maven的打包阶段,调用jar插件来构建应用程序jar。
- 然后运行程序集插件,并将构造的jar,资源和依赖项组合到一个zip文件中,该文件由程序集文件(
distribution-zip.xml
)定义。
在pom中,配置插件:
maven-jar-plugin 2.2 true ./lib/ com.acme.KillerApp ./conf/ *.properties maven-assembly-plugin 2.2-beta-5 ${basedir}/assembly/distribution-zip.xml package single ...
程序集文件distribution-zip.xml
(感谢Neeme Praks )结合了创建的jar,资源和依赖项:
dist zip true lib runtime ${project.build.directory} / *.jar src/main/resources conf ${project.basedir} / README* LICENSE* NOTICE*
生成的可分发zip文件像target/killer-app-1.0-dist.zip
一样创建!
您需要使用两个插件来完成此任务: maven-jar-plugin和maven-assembly-plugin 。
有用的pom.xml
示例:
- 如何使JAR可执行并设置清单类路径
- 如何从JAR文件中排除文件
- 程序集插件的用法
(我建议你将用户可编辑的属性文件分开到单独的目录,但这是一个品味问题。)
示例assembly配置,以帮助您入门:
dist zip true dist lib runtime src/conf conf src/run *.sh src/run/run.sh 0755