我在Eclipse中有一个多模块Maven项目。它有一个jar模块,“myapp-core”和一堆.war模块。核心模块依赖于一些外部罐子,战争模块依赖于核心。
问题是,当我构建.war文件时,所有依赖项都会被复制到所有WEB-INF / lib文件夹中,所以我们有重复项。理论上,解决问题的正确方法是将myapp-core中的依赖项赋予“提供”范围。不幸的是,当我这样做时,所有.war模块都会出现编译错误。无论如何,所有传递依赖都会被复制!
如何设置以排除战争中常见的依赖关系?
(不幸的是,我不能一个一个地排除所有传递文物。其中大约有50个,而且这是一个不断变化的清单。)
答案 0 :(得分:1)
您可以排除某些工件所引入的某些传递依赖项,而不是“提供”,并允许保留其他依赖项。例如,
X -depends-> B1 -depends-> C1
Y -depends-> B2 -depends-> C2 -depends-> D1
然后设置你的pom让X排除B1。然后你最终得到了最新的&最大B和最新C(假设B2是B1的较新版本,C2是C1的较新版本)。此外,您可以将D1声明为依赖项,或将其标记为“已提供”。
有关更多示例,请参阅mvnref-book/dependencies,另请参阅其他stackexchange Q& A here
答案 1 :(得分:1)
您可以使用配置部分排除和包含工件
<project>
...
<build>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<!--
Exclude JCL and LOG4J since all logging should go through SLF4J.
Note that we're excluding log4j-<version>.jar but keeping
log4j-over-slf4j-<version>.jar
-->
<packagingExcludes>
WEB-INF/lib/commons-logging-*.jar,
%regex[WEB-INF/lib/log4j-(?!over-slf4j).*.jar]
</packagingExcludes>
</configuration>
</plugin>
</plugins>
</build>
...
</project>
供参考,请参阅here