【问题标题】:maven enforcer plugin flags dependencyConvergence error in transitive dependenciesmaven 执行器插件标记传递依赖项中的依赖收敛错误
【发布时间】:2014-04-26 13:25:59
【问题描述】:

场景:我的项目启用了 maven-enforcer-plugin dependencyConvergence 规则。它依赖于一个库,该库通过使用dependencyManagement 声明纠正了自己的依赖收敛,但它似乎不影响下游依赖版本的解析。

我正在谈论的错误消息类型的示例(请注意,这两个版本都被d 继承为c 模块下的传递依赖项):

Dependency convergence error for org.apache.commons:commons-lang3:3.0 paths to dependency are:
+-com.example:d:1.0-SNAPSHOT
  +-com.example:c:1.0-SNAPSHOT
    +-com.example:b:1.0-SNAPSHOT
      +-org.apache.commons:commons-lang3:3.0
and
+-com.example:d:1.0-SNAPSHOT
  +-com.example:c:1.0-SNAPSHOT
    +-org.apache.commons:commons-lang3:3.1

mvn dependency:tree 显示出类似的不一致。 c 管理传递版本:

[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ c ---
[INFO] com.example:c:jar:1.0-SNAPSHOT
[INFO] +- com.example:b:jar:1.0-SNAPSHOT:compile
[INFO] |  \- (org.apache.commons:commons-lang3:jar:3.1:compile - version managed from 3.0; omitted for duplicate)
[INFO] \- org.apache.commons:commons-lang3:jar:3.1:compile

d 将其显示为冲突:

[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ d ---
[INFO] com.example:d:jar:1.0-SNAPSHOT
[INFO] \- com.example:c:jar:1.0-SNAPSHOT:compile
[INFO]    +- com.example:b:jar:1.0-SNAPSHOT:compile
[INFO]    |  \- (org.apache.commons:commons-lang3:jar:3.0:compile - omitted for conflict with 3.1)
[INFO]    \- org.apache.commons:commons-lang3:jar:3.1:compile

这似乎是一个潜在的无穷无尽的问题。如果我在d 中使用dependencyManagement 更正它,那么我只是将问题向下游推给d 的任何消费者。我可以通过排除 c 项目的 pom 中的传递依赖来避免错误,但这就是为什么我在 c 中有 dependencyManagement 声明!

我认为这是 Maven 中的错误,或者可能是在执行器插件中。我错过了什么吗?处理这种情况的正确方法是什么?

这是http://jira.codehaus.org/browse/MNG-3038 的案例吗(自 2007 年开放!)?在我的例子中,依赖项在整个过程中无处不在。

【问题讨论】:

  • 您使用哪个 Maven 版本?你能举一个发生这种情况的完整例子吗?或者你能在 Github 上创建这样的例子更好吗?
  • Maven 3.1 和 3.2 都出现了这个问题。上面的例子是完整的; poms 很简单: b->lang3:3.0, c->lang3 + depMgmt(lang3:3.1), d->c.

标签: maven transitive-dependency maven-enforcer-plugin


【解决方案1】:

你说得对,这将是一个潜在的无穷无尽的问题。这是因为您没有修复组件“b”中的依赖关系。管理“c”或“d”中的依赖关系并不能消除问题:组件“b”可能会与较新的版本中断,甚至可能包含 commons-lang:3.0。在后一种情况下,您的类路径中有两个不同版本的 commons-lang,如果您的应用程序正常工作,那将是幸运的。

【讨论】:

  • b 直接依赖于 lang3 3.0,仅此而已。 “您没有修复依赖项”是什么意思?
猜你喜欢
  • 2023-03-31
  • 2021-10-29
  • 2012-01-19
  • 2015-09-19
  • 2016-08-12
  • 2016-09-24
  • 1970-01-01
  • 2014-04-25
  • 1970-01-01
相关资源
最近更新 更多