Eclipse 从.war中排除maven依赖项的正确方法

Eclipse 从.war中排除maven依赖项的正确方法,eclipse,maven,war,Eclipse,Maven,War,我在Eclipse中有一个多模块Maven项目。它有一个jar模块“myapp core”和一堆.war模块。核心模块依赖于一些外部JAR,war模块依赖于核心 问题是,当我构建.war文件时,所有依赖项都被复制到所有WEB-INF/lib文件夹中,因此我们有重复项。理论上,解决这个问题的正确方法是给myappcore中的依赖项一个“提供”的范围。不幸的是,当我这样做时,所有的.war模块都会出现编译错误。所有可传递的依赖项都会被复制 如何设置它以排除战争中常见的依赖关系 (不幸的是,我不能一个

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

问题是,当我构建.war文件时,所有依赖项都被复制到所有WEB-INF/lib文件夹中,因此我们有重复项。理论上,解决这个问题的正确方法是给myappcore中的依赖项一个“提供”的范围。不幸的是,当我这样做时,所有的.war模块都会出现编译错误。所有可传递的依赖项都会被复制

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

(不幸的是,我不能一个接一个地排除所有可传递的工件。它们大约有50个,而且这是一个不断变化的列表。)

您可以排除某些工件拉入的某些可传递依赖项,并允许其他依赖项保留,而不是“提供”。例如:

X -depends-> B1 -depends-> C1
Y -depends-> B2 -depends-> C2 -depends-> D1
然后设置pom,使X排除B1。然后你得到了最新的&最好的B和最新的C(假设B2是B1的更新版本,C2是C1的更新版本)。此外,您可以将D1声明为依赖项,或将其标记为“已提供”


有关更多示例,请参阅,以及您可以使用配置部分排除和包括工件的其他stackexchange Q&A

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

...