我可以将Maven配置为选择冲突的"最新"依赖,而不是"最近"吗?
"最新"是Ivy和其他合理的依赖管理器的默认值,请参阅http://ant.apache.org/ivy/history/2.2.0/settings/conflict-managers.html
我发现"最近"的策略很少是我想要的.
我正在使用Maven 3.3.3,但如果需要我可以切换版本.
我知道如何在个别冲突上覆盖Maven的选择,但我更愿意更改默认值,这样我就不必一次检测并修复每个冲突.
(参见关于"依赖调解" 的Maven文档)
在解决版本冲突时,是否可以将Maven配置为自动使用"最新"版本的依赖项而不是"最近"版本?
不,您无法将Maven的依赖关系中介策略配置为最近的除外.
之前已经提出了添加可配置的依赖关系中介策略,但最终被放弃了,因为该提案涉及更改POM XSD,这在多年来没有发生过.
为什么Maven使用最近的策略作为默认策略?
Maven青睐最近的策略有两个原因:
轻松覆盖单个冲突:对于任何特定的冲突依赖项,您可以在自己的POM中指定其版本,并且该版本将变为最接近的版本.
可重现的构建: 依赖关系图中任何位置的版本范围都可能导致构建不可重现."最新"的调解策略会放大版本范围对构建再现性的负面影响.
但我真的想要一个不同的依赖调解策略.我能做什么?
这些是您最好的选择:
制作Maven扩展:使用"最近"策略由NearestVersionSelector
inMavenRepositorySystemUtils
指定.您可以创建自己的Maven扩展,定义您自己的扩展,VersionSelector
实现您选择的策略,然后在afterSessionStart
扩展的方法中,DependencyGraphTransformer
将会话替换为使用您的自定义的会话VersionSelector
.
迁移到另一个构建工具:显然.