如何创建多模块maven项目的每个模块的自包含(独立)jar

时间:2013-10-11 19:10:23

标签: java maven jar intellij-idea

我有一个多模块maven项目。父POM和单个模块的pom工作正常(因为每个模块中的代码运行正常,没有任何依赖性问题,mvn:package目标运行没有任何警告/错误)。现在,我需要为每个模块创建一个jar。

项目结构及其依赖关系大致与此类似

ProjectABC
|
|--ModuleA
|     |-Log4J
|     |-Guava
|     |-pom.xml  
|
|--ModuleB
|     |-ModuleA
|     |-Commons
|     |-pom.xml         
|
|
|--MoudleC
|     |-ModuleB
|  
|-pom.xml

我跟着这个 Maven multi-module project - copying all "package" JARS from submodules into parent/target/

并且,能够将我的所有子模块的jar放到mouduleJars文件夹中,但是我无法运行任何jar,因为模块的依赖项都没有被复制到mouduleJars文件夹中。例如,如果module A依赖于Log4J,我的mouduleJars文件夹中没有log4j.jar,log4J也没有打包在moduleA.jar中

问题

如何在多模块项目中创建包含self(独立模块jar)的self。 或者,如何获取lib文件夹中的所有依赖项。

临时解决方法

现在,我使用IntelliJ IDEA ide将所有依赖项(如log4J,Guvava等)复制到lib文件夹中

并通过将moduleA.jar文件夹添加到类路径来运行maven生成的lib。这样运行正常,但我不喜欢这种手动方法,并希望maven能够处理它。

谁认为它是重复的或已经回答的人和

我的问题不是问 Maven Assembly Submodules Multimodules 或者这个

Maven : Multimodule projects and versioning

我已经花了一天多的时间尝试使用maven-assembly-plugin,但没有取得任何成功。

如果需要更多详细信息,请与我们联系。

2 个答案:

答案 0 :(得分:3)

如果您想要中的所有依赖项,则需要创建uberjar。将依赖项放在jar中并不是jar通常工作的方式。 uberjar让你这样做。 Shade是一个在java中构建一个的插件。你也可以这样做:How can I create an executable JAR with dependencies using Maven?

如果你想创建一个lib文件夹,这里的答案将解释如何:force Maven2 to copy dependencies into target/lib

答案 1 :(得分:0)

我用AppAssembler maven插件做了这个。它会自动复制所有必需的依赖项,并为主类创建快捷方式。它比我试过的其他插件容易得多。

对于超级jar应用程序,我使用maven-shade-plugin将jar混合到一个+ proguard中进行收缩,但AppAssembler的使用速度更快,更稳定。