2

我有一个多模块 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,则 log4J 都没有打包在 moduleA.jar 中

问题

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

临时解决方法

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

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

对于那些认为它是重复的或已经回答的和downvoters的人

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

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

我已经花了一天多的时间试图让这个工作maven-assembly-plugin没有任何成功。

如果需要更多详细信息,请告诉我。

4

2 回答 2

3

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

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

于 2013-10-11T19:19:21.013 回答
0

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

对于 uber-jar 应用程序,我使用maven-shade-plugin将 jar 合并为一个 + proguard 以进行收缩,但 AppAssembler 使用起来更快更稳定。

于 2013-10-11T22:01:33.353 回答