获取多个maven依赖树

时间:2014-04-15 08:24:46

标签: maven maven-3 maven-dependency-plugin

我有一个Maven项目,它依赖于许多其他项目,这些项目通常有几个相互冲突的依赖项。

Maven将使用其最近获胜策略自动解决依赖冲突,在这种情况下,它会在结果mvn dependency:tree上列出所选版本:

  

[INFO] | - (commons-collections:commons-collections:jar:2.1:compile - 省略与2.0冲突)

在这个例子中,如果选择了commons-collections:2.1,我会有一个备用依赖树,可能包含多个其他依赖项。

我需要知道的是,如果选择其他版本,这个备用树会是什么样子。

我目前正在做的方法是识别与其他依赖项冲突的顶级依赖项,并为其运行依赖树,即通过有效创建具有单个依赖项的多个新poms,仅用于获取目的他们的树木。这是有效的,我可以为此编写脚本,但它是一个手动过程。我正在寻找Maven的目标或其他方法,这会对我的pom做出直截了当的事情。

我已经查看了Maven依赖插件的其他目标,例如analyze,但在这种情况下它们似乎没有帮助。

1 个答案:

答案 0 :(得分:1)

没有插件可以做到这一点,但有一个插件可以帮助处理最接近的maven依赖解决策略,并防止它偶尔意外的后果。

这是maven enforcer plugin,它的dependencyConvergence规则基本上会关闭maven最近赢的策略。将该规则应用于构建,如果存在对传递库的版本1的依赖性,但是对同一库的版本2的依赖性,则构建将失败。

这是一个失败的早期机制,它将允许检测maven最近的依赖机制何时启动并默默地选择我们希望自己做的库版本基于某些代码/库分析。

使用此插件可以执行的操作是通过逐个选择所需的版本来修复当前版本,然后打开dependencyConvergence以用于将来的版本。这将确保您不必在不久的将来进行相同的分析和修复,当其他人更换poms并再次出现问题时。