1

这里发布了一些类似的问题但那里没有答案。

我有多模块 Maven 项目

当我跑步时mvn dependency:tree,我看到以下内容

[INFO] ------------------------------------------------------------------------
[INFO] Building Service 2.2.22-SNAPSHOT
[INFO] ------------------------------------------------------------------------

[INFO] +- org.apache.httpcomponents:httpclient:jar:4.3.2:compile
[INFO] |  \- commons-codec:commons-codec:jar:1.6:compile

[INFO] ------------------------------------------------------------------------
[INFO] Building common 2.2.22-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]  +- com.mycompany.project:jar:2.1.115:compile
           +- commons-httpclient:commons-httpclient:jar:3.1:compile
[INFO] |  |  \- commons-codec:commons-codec:jar:1.2:compile

在 pom.xml 中没有进行任何其他排除任何库的配置。在我的决赛中war/WEB-INF/lib

我看到了commons-codec-1.6.jar,,,commons-httpclient-3.1.jarhttpclient-4.3.2.jar但我没有看到commons-codec-1.2.jar。这是为什么?

4

1 回答 1

2

选择了 Maven 的依赖中介,而不是包含两个 commons-codec jar,这可能导致冲突和问题commons-codec-1.6.jar

  • 依赖中介——这决定了当遇到工件的多个版本时将使用哪个版本的依赖。目前,Maven 2.0 仅支持使用“最近定义”,这意味着它将使用依赖树中与您的项目最接近的依赖版本。您始终可以通过在项目的 POM 中明确声明来保证版本。请注意,如果两个依赖版本在依赖树中的深度相同,则在 Maven 2.0.8 之前没有定义哪个会获胜,但从 Maven 2.0.9 开始,声明中的顺序很重要:第一个声明获胜。
  • “最近的定义”意味着使用的版本将是依赖关系树中最接近您的项目的版本,例如。如果 A、B 和 C 的依赖项定义为 A -> B -> C -> D 2.0 和 A -> E -> D 1.0,则构建 A 时将使用 D 1.0,因为从 A 到 D 的路径通过E 更短。您可以在 A 中显式添加对 D 2.0 的依赖项以强制使用 D 2.0
于 2015-06-20T01:07:21.407 回答