我有一个多模块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
,但没有取得任何成功。
如果需要更多详细信息,请与我们联系。
答案 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的使用速度更快,更稳定。