我有一个项目有两个模块如下:
项目
- module1(阴影jar,依赖于lib A,B)
- module2(战争)
Module2依赖于module1。并且module1打包到带有maven shade插件的阴影jar。 Module2打包到依赖于module1的war。
当我尝试执行mvn包时,它会生成一个包含阴影jar的war,还包含阴影jar依赖的依赖库(A,B)。
那很奇怪。我怎样才能使战争只包含阴影jar而不包含依赖的lib?任何建议,谢谢。
答案 0 :(得分:-1)
问题在于,Maven并不知道module1
已被遮挡。当它试图解析module2
的依赖关系时,它会查看module1的POM并查看其所有依赖项,这些依赖项随后包含在module2的WAR文件中。
您可以通过三种不同方式解决此问题:
module1
。你还没有说明为什么你需要这样做,但如果你能避免它,这就是我的建议。module1
指定为module2
的依赖项时,请排除其所有依赖项:像这样:
<dependency>
<groupId>...</groupId>
<artifactId>module1</artifactId>
<version>${project.version}</version>
<exclusions>
<exclusion>
<!--
Pre-Maven 3.2.1: Repeat groupId and artifactId for all
direct dependencies of module1.
Maven 3.2.1 and onwards: substitute the '...' below with '*'
-->
<groupId>...</groupId>
<artifactId>...</artifactId>
</exclusion>
</exclusions>
</dependency>
module1
并应用上面的排除技巧。我刚试过这个,它对我有用。根据我的经验,当依赖于自定义&#34;捆绑&#34;时,程序集往往比着色的工件更可靠地工作。然后你根本不需要做阴影。