我是否可以将Maven配置为选择冲突的“最新”依赖项,而不是“最近的”依赖项?
“最新”是常春藤和其他明智的依赖管理器中的缺省值,参见http://ant.apache.org/ivy/history/2.2.0/settings/conflict-managers.html。
我发现“最近”的策略很少是我想要的。
我正在使用Maven 3.3.3,但如果有必要,我可以切换版本。
我知道如何在单个冲突中覆盖Maven的选择,但我更愿意更改默认设置,这样就不必每次检测和修复每个冲突。
(参见关于“依赖中介”的Maven博士 )
发布于 2017-04-02 07:17:53
我可以将配置为在解决版本冲突时自动使用依赖项的“最新”版本而不是“最近”版本吗?
No,您不能将Maven的依赖中介策略配置为最接近的任何东西。
添加了以前曾提出过可配置依赖中介策略。,但最终被放弃了,因为该提案涉及更改POM,这已经有几年没有发生了。
为什么Maven使用最近的策略作为默认值?
最近的策略受到Maven的青睐,原因有二:
,但是我真的想要一个不同的依赖中介策略。我能做什么?
以下是你最好的选择:
MavenRepositorySystemUtils指定。您可以使用创建自己的Maven扩展来定义实现您选择的策略的自己的VersionSelector,然后在扩展的afterSessionStart方法中,将会话的DependencyGraphTransformer替换为使用自定义VersionSelector的DependencyGraphTransformer。发布于 2017-04-04 22:12:38
您还可以为Maven "enforcer“插件使用"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>https://stackoverflow.com/questions/34201120
复制相似问题