【问题标题】:Right way to exclude maven dependencies from a .war从 .war 中排除 Maven 依赖项的正确方法
【发布时间】:2011-08-15 18:23:43
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: eclipse maven war


    【解决方案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问​​答here

    【讨论】:

      【解决方案2】:

      您可以使用配置部分排除和包含工件

       <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

      【讨论】:

        猜你喜欢
        • 2012-02-25
        • 1970-01-01
        • 2016-06-11
        • 1970-01-01
        • 1970-01-01
        • 2014-06-06
        • 2011-08-01
        • 2015-12-08
        • 1970-01-01
        相关资源
        最近更新 更多