打包命令行Java项目的最佳方法

时间:2011-09-11 21:17:05

标签: maven maven-assembly-plugin multi-module

我正在创建一个没有GUI的java命令行项目。该项目使用任意数量的开源项目:Spring,Logback,Commons CLI等。 当我开始考虑打包时,我想象它会作为一个zip文件出来,可以爆炸到jar,lib子目录和lib中的依赖jar。

adapter.jar
 /lib/dependencyA.jar
 /lib/dependencyB.jar 
 etc.  

我一直在玩Maven Assembly,但它仍然没有像上面那样出现,我没有找到任何确实产生上述结构的例子。有可能这样做吗? 此外,具有多模块结构增加了我无法解决的另一层复杂性,因为组装模块无法将核心模块作为依赖项找到。这是我的第一个Maven项目,所以我仍在学习Maven的工作原理。我已经阅读了Sonatype的书,但遗漏了一些内容,因为即使使用最佳实践部分也无法解决缺失的依赖关系。 我见过的例子通常涉及合并到一个超级可执行jar,其中一些使用Shade项目,有些则没有。我的问题是,做一个超级jar包括像Spring这样的第三方库是一个好主意吗?或者我应该坚持我的原始zip / lib子目录计划?

2 个答案:

答案 0 :(得分:2)

让您的装配模块依赖于您要打包的模块,然后使用< dependencySets> of< moduleSets>标签,以包含在您希望的任何布局中。如果您有其他一些不是来自依赖项的文件,您可以将它们放在部署模块本身中。

请仔细阅读汇编描述符文档。您可以打包,解压缩,包含/排除和设置程序集中文件的权限。

如果您还没有在maven上看过sonatype书,请参阅相关章节:http://www.sonatype.com/books/mvnref-book/reference/assemblies-sect-best-practices.html

编辑:转义了<'s

答案 1 :(得分:1)

您只需要在程序集描述符中更具体。使用一个仅包含主jar的dependencySet并将其传递到顶部,另一个仅排除主jar并传递给lib目录。

相关问题