将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-pluginmaven-assembly-plugin

有用的pom.xml示例:

  • 如何使JAR可执行并设置清单类路径
  • 如何从JAR文件中排除文件
  • 程序集插件的用法

(我建议你将用户可编辑的属性文件分开到单独的目录,但这是一个品味问题。)

示例assembly配置,以帮助您入门:

  dist  zip  true dist   lib runtime     src/conf conf   src/run   *.sh      src/run/run.sh  0755