1

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

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

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

4

2 回答 2

2

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

请仔细阅读程序集描述符文档。您可以对程序集中的文件进行打包、解包、包含/排除和设置权限。

如果你还没有看过关于 maven 的 sonatype 书,这里是相关章节: http: //www.sonatype.com/books/mvnref-book/reference/assemblies-sect-best-practices.html

编辑:逃脱了 <'s

于 2011-09-11T21:27:25.993 回答
1

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

于 2011-09-11T21:28:07.767 回答