【问题标题】:Obtain multiple maven dependency trees获取多个maven依赖树
【发布时间】:2014-05-29 11:37:17
【问题描述】:

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

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

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

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

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

我目前正在做的方式是识别与其他依赖项发生冲突的顶级依赖项,并为此运行依赖项树,即通过有效地创建具有单个依赖项的多个新 pom 来获取它们的树.这行得通,我可以为此编写一个脚本,但这是一个手动过程。我正在寻找 Maven 目标或其他方法,这将作用于我的 pom 使事情变得简单。

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

【问题讨论】:

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


    【解决方案1】:

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

    这是maven enforcer plugin,它的dependencyConvergence 规则基本上关闭了maven 最近获胜策略。将该规则应用于构建后,如果依赖于传递库的版本 1,但也依赖于同一库的版本 2,则构建将失败。

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

    你可以用这个插件做的就是通过一个一个选择你想要的版本来修复当前的构建,然后打开dependencyConvergence以进行未来的构建。这将确保您不必在不久的将来进行相同的分析和修复,而其他人更改了 pom 并且问题再次出现。

    【讨论】:

    • 这有帮助,谢谢。但是我仍然需要获取多个依赖树。看起来方法是将我的 pom 分解为单依赖 pom,我已经手动完成了。有什么方法可以自动化吗?
    猜你喜欢
    • 2012-03-30
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 2011-10-11
    相关资源
    最近更新 更多