Maven将依赖关系调解策略设置为最新而非最近的策略
我可以配置Maven来选择对冲突的“最新”依赖,而不是“最近”吗?
“最新”是常春藤和其他合理依赖管理器的默认值,请参阅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喜欢采用最接近的策略,原因有二:
但我真的想要一个不同的依赖关系调解策略。 我能做什么?
这些是你最好的选择:
NearestVersionSelector
中的MavenRepositorySystemUtils
指定。 您可以创建自己的Maven扩展,该扩展定义了自己的VersionSelector
,它实现了您选择的策略,然后在扩展的afterSessionStart
方法中, afterSessionStart
的DependencyGraphTransformer
替换为使用您的自定义VersionSelector
的DependencyGraphTransformer
。 您也可以对Maven“执行者”插件使用“requireUpperBoundDeps”规则,该规则不会直接实施“最新获胜”冲突解决策略,但会强制执行最终结果相同。 您需要手动将传递依赖项<exclusions>
或<dependencyManagement>
规则添加到您的POM中,以便在每次冲突中选择最新的依赖项,但至少您会确信最终结果为“最新胜利”。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.4.1</version>
<executions>
<execution>
<id>enforce</id>
<configuration>
<rules>
<requireUpperBoundDeps />
</rules>
</configuration>
<goals>
<goal>enforce</goal>
</goals>
</execution>
</executions>
</plugin>
链接地址: http://www.djcxy.com/p/31077.html
上一篇: Maven set dependency mediation strategy to newest rather than nearest