【问题标题】:How does Maven resolve dependency conflicts?Maven如何解决依赖冲突?
【发布时间】:2016-08-10 08:06:39
【问题描述】:

假设我们有一个项目 A。

  • 项目 A 依赖于项目 B 1.0 版
  • 项目 A 依赖于项目 C 2.0 版
  • 项目 C(2.0 版)依赖于项目 B 2.0 版

在这种情况下,Maven 将如何解决冲突?

【问题讨论】:

  • 我对这个问题不满意。根据stackoverflow.com/help/how-to-ask,你应该“解释你是如何遇到你试图解决的问题的,以及阻碍你自己解决的任何困难。”我认为阻止自己解决问题没有任何困难。
  • 这是多模块构建吗?
  • @khmarbaise 没有。我在项目 A 的 pom.xml 中有项目 B 和项目 C 作为依赖项。

标签: maven


【解决方案1】:

它将使用 Project B v 1.0 构建

您可以使用http://maven.apache.org/plugins/maven-dependency-plugin/examples/resolving-conflicts-using-the-dependency-tree.html 看,它省略了 B 2.0,因为 1.0 更接近。

从上面的页面:

默认 Maven 使用最近胜出策略解决版本冲突。

输出会是这样的:

[INFO] [dependency:tree]
[INFO] Project A
[INFO] +- Project-B:jar:1.0:compile
[INFO] \- Project-C:jar:2.0:compile
[INFO]    \- (Project-B:jar:2.0:compile - ommited for conflicts with 1.0)
【解决方案2】:

我找到了这个解释,它对我真的很有帮助。

最近的定义表示使用的版本将是依赖关系树中与您的项目最接近的版本,

例如。如果 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 2017-11-20
    • 2019-01-01
    • 2023-02-02
    相关资源
    最近更新 更多