我有maven项目,它被分成几个子模块。结构看起来像这样:
我想添加另一个模块,负责将整个应用程序打包到一个可运行的JAR中。不幸的是,如果我只是创建该子模块并定义其他模块的依赖关系,我将获得包含其他jar的jar(不仅仅是编译类)。顺便说一句 - 核心将被打包两次(因为gui-impl也取决于核心)。
如何解决这个问题?有没有可以帮助我的maven插件?
答案 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中而不需要重复。 谢谢!