我的问题摘要:在多模块项目中,其中一个模块依赖于另一个模块。使用 构建此模块的 uber jar 时maven-shade-plugin
,正确包含其所有依赖项,但不包含其他模块的依赖项。
我有一个多模块项目,具有以下架构:
pom.xml (parent pom)
--module_1
----pom.xml
--module_2
----pom.xml
module_2
依赖于module_1
,在其 pom.xml 中声明:
<groupId>${project.groupId}</groupId>
<artifactId>module_1</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
我想构建一个 uber jar module_2
,并使用maven-shade-plugin
, 声明如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
这会产生一个 uber jar:
- 包括所有依赖
module_2
- 包括罐子
module_1
- 不包括依赖项
module_1
有没有办法指定包括所有依赖项module_1
?
我发现的一个解决方案是使用maven-shade-plugin
来构建一个超级罐子module_1
。由于这个 jar 包含在 的 uber jar 中module_2
,因此它可以工作。但我想避免这种解决方案,以便能够发布一个简单的 jar 文件module_1
,不包括它的依赖项。
而且我想使用maven-shade-plugin
而不是maven-assembly-plugin
(为了更好地控制最终jar中包含的文件)
遵循@user2321368 的更多详细信息请求
maven 版本:Apache Maven 3.0.3 (r1075438; 2011-02-28 18:31:09+0100)
module_1 的 pom.xml,我在其中包含了它的依赖项:(范围和版本在依赖项管理部分的父 pom 中声明)
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>other_module_I_havent_mention</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>other_module_I_havent_mention</artifactId>
<type>test-jar</type>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
...
</dependencies>