我有一个Maven项目,它依赖于许多其他项目,这些项目通常有几个相互冲突的依赖项。
Maven将使用其最近赢策略自动解决依赖冲突,在这种情况下,它将在结果mvn dependency:tree上列出所选版本。
INFO - (commons-collections:commons-collections:jar:2.1:compile -与2.0冲突省略)
在本例中,如果选择collections:2.1,我将有一个备用依赖树,可能包含多个其他依赖项。
我需要知道的是,如果选择另一个版本,这个备用树会是什么样的。
我目前所做的方法是识别与其他依赖项冲突的顶级依赖项,并运行依赖树,即有效地创建多个带有单个依赖项的新poms,目的是获取它们的树。这是可行的,我可以为此编写一个脚本,但这是一个手动过程。我正在寻找Maven目标或其他方法,这将对我的pom采取行动,使事情变得简单明了。
我看过Maven依赖插件的其他目标,如analyse,但在这种情况下,它们似乎没有帮助。
发布于 2014-04-22 19:35:50
没有任何插件能够做到这一点,但是有一个插件可以帮助处理最近的maven依赖解决策略,并防止它偶尔产生意外的后果。
这是maven执行器插件,使用它的dependencyConvergence规则基本上关闭了maven最近的双赢策略。将该规则应用于构建时,如果对传递库的版本1存在依赖,但也依赖于同一个库的版本2,则构建将失败。
这是一种失败的早期机制,它允许检测maven最近的依赖机制何时启动并默默地为我们希望基于某些代码/库分析的库版本做出选择。
使用这个插件可以做的是通过一个一个地选择您想要的版本来修复当前的构建,然后为将来的构建打开dependencyConvergence。这将确保您不必在不久的将来进行相同的分析和修复,当其他人更改吊臂时,问题再次发生。
https://stackoverflow.com/questions/23078241
复制相似问题