【问题标题】:Best way to package a command line Java project打包命令行 Java 项目的最佳方式
【发布时间】:2011-11-14 22:18:14
【问题描述】:

我正在创建一个没有 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 项目,一些不使用。我的问题是,做一个包含 Spring 等 3rd 方库的 uber jar 是个好主意吗?还是我应该坚持我原来的 zip/lib 子目录计划?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    编辑:转义了

    【讨论】:

    • 感谢您的回复。我做了更多的工作,并解决了问题,但我仍然不知道这是否是正确的方法。我最初的问题是使用 uber-jar 还是继续使用 lib 计划。有关该策略的任何建议或参考资料?
    • 我开始回复,但后来我发现我还有很多话要说,而且对于一个 SO 答案来说有点主观,所以我写了一篇博客文章。看看,让我知道你的想法:foobarbazqux.blogspot.com/2011/09/…
    • 是的,这篇博文非常有用,并提出了一些我没有考虑过的观点——谢谢!
    【解决方案2】:

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

    【讨论】:

    • 谢谢,最终我得到了两个依赖集的想法。不过,如果这是解决这种情况的最佳方法,那就更明智了:)
    猜你喜欢
    • 2020-12-17
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 2014-08-20
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多