将maven子模块打包成单个存档

时间:2014-12-26 10:36:23

标签: java maven

我有maven项目,它被分成几个子模块。结构看起来像这样:

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

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

如何解决这个问题?有没有可以帮助我的maven插件?

2 个答案:

答案 0 :(得分:1)

如果您想要包含所有依赖项的单个可执行jar,请使用maven-shade-plugin。无论它们多么纠结,你都不会得到任何重复的进口。此外,您不必为此创建单独的子模块,您可以在现有的顶级子模块中执行此操作(但这确实取决于您)。

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

答案 1 :(得分:0)

感谢您的回答,但我弄清楚出了什么问题。在我的包装子模块中,我将包装设置为JAR,期望它是最终的,可运行的产品:< 我读到了maven-assembly-plugin(正如miljanm提到的那样),然后我将包装更改为pom并添加了此插件的配置。 maven-assembly-plugin就是我想要的,它允许我将所有子模块封装到单个可运行的jar中,而无需将一个jar包装到另一个jar中而不需要重复。 谢谢!