【发布时间】:2010-12-26 02:47:27
【问题描述】:
我有一个包含多个 jar 模块的 maven2 项目,构建项目将在 modules/XYZ/target/XYZ-x.x.x.jar 目录中获取每个模块的 .jar 档案
现在,如果我的项目 P 的版本是 P-p.q.r,并且我想生成一个包含所有子模块的单个 jar P-p.q.r-all.jar,我应该怎么做?
【问题讨论】:
标签: maven-2
我有一个包含多个 jar 模块的 maven2 项目,构建项目将在 modules/XYZ/target/XYZ-x.x.x.jar 目录中获取每个模块的 .jar 档案
现在,如果我的项目 P 的版本是 P-p.q.r,并且我想生成一个包含所有子模块的单个 jar P-p.q.r-all.jar,我应该怎么做?
【问题讨论】:
标签: maven-2
你想要达到的目标叫做uber jar。该模块必须具有要打包到一个 jar 中的所有其他子模块的依赖项。如果您创建另一个将生成所需工件的子模块,则可以将其构建在具有所有依赖项的反应器中,但如果它将是一个单独的项目,则您必须安装所有 uber jar 依赖项。
| parent
| -- submodule1
...
| -- submoduleN
| -- uberjarSubmodule
Uber jar 可以使用:
maven-shade-plugin - 在你的情况下,你必须记住从你的模块中排除传递依赖
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.2.2</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<artifactSet>
<excludes>
<exclude>classworlds:classworlds</exclude>
<exclude>junit:junit</exclude>
<exclude>jmock:jmock</exclude>
<exclude>xml-apis:xml-apis</exclude>
</excludes>
</artifactSet>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
...
</project>
maven-assembly-plugin - 在this 问题中您会找到详细答案
【讨论】:
取决于您将如何发布它,如果您的 jar 是您希望其他开发人员通过 maven 下载和使用的库。您应该在项目 pom.xml 中将它们指定为dependencies。
如果您尝试向只想获取二进制文件并使用您的项目的最终用户发送一些东西,您可以尝试使用assembly 插件来打包您的项目。使用此插件,您可以将 jar 与其依赖项一起打包。它不会将所有内容放在一个 jar 文件中,但假设您正确配置了用户类路径,这并不重要。
【讨论】: