【问题标题】:Packing maven submodules into single archive将 maven 子模块打包到单个存档中
【发布时间】:2014-12-26 10:36:22
【问题描述】:

我有一个 maven 项目,它被分成几个子模块。结构如下:

  • base - 它是所有子模块的父级
  • base/bom - 材料清单
  • base/core - 应用逻辑和公共接口
  • base/gui-impl - gui 的实现(取决于核心)

我想添加另一个模块,负责将整个应用程序打包到一个可运行的 JAR 中。不幸的是,如果我只是创建该子模块并定义对其他模块的依赖关系,我将得到包含其他 jar 的 jar(不仅仅是编译的类)。顺便说一句 - core 会被打包两次(因为 gui-impl 也依赖于 core)。

如何解决这个问题?有什么 Maven 插件可以帮助我吗?

【问题讨论】:

  • 你用什么插件来打包?您所描述的听起来不像标准的 Maven 包装结果(包含其他罐子的罐子)。通常是所有的罐子合二为一,没有重复。

标签: java maven


【解决方案1】:

如果您想要一个包含所有依赖项的单个可执行 jar,请使用 maven-shade-plugin。无论它们多么纠结,您都不会得到任何重复的导入。此外,您不必为此创建单独的子模块,您可以在已经存在的顶级模块中完成(但这完全取决于您)。

其他值得注意的插件有 maven-assembly-plugin 用于复杂的打包需求和 appassembler-maven-plugin,它不会生成单个 jar,而是生成带有 bin/、conf/、lib/ 目录和执行脚本的漂亮目录布局,我更适合最终用户应用程序。我通常做的是使用 appassembler 制作应用程序目录,然后使用 assembly-plugin 将它们打包成 tar.gz 或 .zip 进行分发。

【讨论】:

    【解决方案2】:

    感谢您的回答,但我知道出了什么问题。在我的包装子模块中,我将包装设置为 JAR,期望它是最终的、可运行的产品:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-30
      • 1970-01-01
      • 1970-01-01
      • 2011-08-27
      • 1970-01-01
      • 2017-03-14
      • 2015-10-19
      相关资源
      最近更新 更多