【问题标题】:How to create self-containing (standalone) jar of each modules of a multi-module maven project如何为多模块maven项目的每个模块创建自包含(独立)jar
【发布时间】:2013-10-19 23:15:09
【问题描述】:

我有一个多模块 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 中

问题

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

临时解决方法

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

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

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

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

Maven : Multimodule projects and versioning

我已经花了一天多的时间尝试与maven-assembly-plugin 一起工作,但没有任何成功。

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

【问题讨论】:

  • 你想要一个包含所有依赖项的 ProjectABC.jar 吗?
  • 如果可以轻松做到,那也应该可以。

标签: java maven jar intellij-idea


【解决方案1】:

如果你想要所有依赖项in jar,你需要创建一个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

【讨论】:

  • 我的目标是在 ModuleB 中执行代码。从图中可以看出,ModuleB 也依赖于 ModuleA。请随时提出更好的方法
  • +1,您提供的两个答案链接看起来很有希望。我会尝试这些并回复你。
  • 将所有依赖项复制到 lib 文件夹对我有用。我在所有模块的 maven-jar-plugin 中添加了<classpathPrefix>lib/</classpathPrefix>。我等到一天结束,从其他人那里得到更多关于它的好信息,然后接受你的回答。 uberjar 看起来也很棒,我稍后会尝试。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2018-11-28
    • 2014-09-26
    • 2012-10-02
    • 2021-03-23
    • 2021-01-19
    • 2018-07-11
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多