Ric*_*ich 13 java conflicting-libraries maven
我可以将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青睐最近的策略有两个原因:
但我真的想要一个不同的依赖调解策略.我能做什么?
这些是您最好的选择:
NearestVersionSelector inMavenRepositorySystemUtils指定.您可以创建自己的Maven扩展,定义您自己的扩展,VersionSelector实现您选择的策略,然后在afterSessionStart扩展的方法中,DependencyGraphTransformer将会话替换为使用您的自定义的会话VersionSelector.您还可以使用Maven“enforcer”插件的“requireUpperBoundDeps”规则,该规则不会直接实现“最新获胜”冲突解决策略,但会强制最终结果相同。您需要手动向 POM 添加传递依赖项<exclusions>或<dependencyManagement>规则,以在每次冲突中选择最新的依赖项,但至少您将确信最终结果是“最新的胜利”。
<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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1042 次 |
| 最近记录: |