从.war中排除maven依赖关系的正确方法

时间:2011-04-29 20:11:20

标签: eclipse maven war

我在Eclipse中有一个多模块Maven项目。它有一个jar模块,“myapp-core”和一堆.war模块。核心模块依赖于一些外部罐子,战争模块依赖于核心。

问题是,当我构建.war文件时,所有依赖项都会被复制到所有WEB-INF / lib文件夹中,所以我们有重复项。理论上,解决问题的正确方法是将myapp-core中的依赖项赋予“提供”范围。不幸的是,当我这样做时,所有.war模块都会出现编译错误。无论如何,所有传递依赖都会被复制!

如何设置以排除战争中常见的依赖关系?

(不幸的是,我不能一个一个地排除所有传递文物。其中大约有50个,而且这是一个不断变化的清单。)

2 个答案:

答案 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