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

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

具有依赖关系的项目结构大致是这样的

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

我遵循这个Maven多模块项目 – 将所有“包”JARS从子模块复制到父/目标/

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

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

临时解决方法

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

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

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

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

Maven:多模块项目和版本控制

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

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

如果你想要jar 的所有依赖项,你需要创建一个uberjar 。 将依赖项放在jar中并不是jar通常工作的方式。 uberjar让你这样做。 Shade是一个在java中构建一个的插件。 您也可以这样做: 如何使用Maven创建具有依赖关系的可执行JAR?

如果你想创建一个lib文件夹,这里的答案将解释如何: 强制Maven2将依赖项复制到target / lib

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

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