我使用Apache Maven Shade Plugin创建了胖jar(包含所有依赖项中所有类的jar)。我当前的项目文件夹结构看起来像这样,
> Parent Module (packaging pom)
> Module 1 (packaging jar)
> Own classes
> Dependency-1
> Dependency-2
> Module 2 (packaging jar)
> Own classes
> Module 1 (I want here only classes written in module-1, not any transitive dependencies)
> Dependency-1
> Dependency-2
> Dependency-3
来自父模块的pom.xml
快照,
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<id>common-shade</id>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
来自Module-1&amp;的pom.xml
快照模块2看起来像这样,
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<id>common-shade</id>
<phase>package</phase>
</execution>
</executions>
</plugin>
在Module-2 pom中为Module-1声明的依赖关系看起来像这样,
<dependency>
<groupId>my.com.groupId</groupId>
<artifactId>my.artifactId</artifactId>
<version>1.0.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
注意:目前,如果我使用mvn dependency:tree -Dverbose
查看我的依赖项,那么它会按预期显示,但shade-plugin
不会将其排除在外。
问题:模块-1&amp; module-2具有不同版本的相同依赖关系。如果我跳过/禁用Module-1中声明的shade-plugin,那么我可以运行Module-2而没有任何问题,但如果我不禁用它,那么Module-2创建的fat jar包含一些来自具有Module-1版本的jar的类,因此我的Module-2停止运行。
更新:
我使用胖罐来运行这样的单个模块,
java -cp module.jar com.mycom.Main
请帮忙吗?