如果一个Maven项目可以过渡地使用一个库的多个版本,Maven的依赖关系调解将按照最接近的定义进行仲裁并在声明中进行排序。 (见docs。)为什么Maven的依赖关系调解不选择最新版本?
例如,如果A→B→X-1.0.0和A→B→C→X-2.0.0,则建筑A将使用X-1.0.0。
为什么?假设X-2.0.0增加了C使用的一些方法是合理的,所以运行A可能会产生一个运行时异常。选择最新版本会更有意义吗? (我知道你可以手动指定它。)
如果一个Maven项目可以过渡地使用一个库的多个版本,Maven的依赖关系调解将按照最接近的定义进行仲裁并在声明中进行排序。 (见docs。)为什么Maven的依赖关系调解不选择最新版本?
例如,如果A→B→X-1.0.0和A→B→C→X-2.0.0,则建筑A将使用X-1.0.0。
为什么?假设X-2.0.0增加了C使用的一些方法是合理的,所以运行A可能会产生一个运行时异常。选择最新版本会更有意义吗? (我知道你可以手动指定它。)
假设某个2.x版本已删除 A或B所使用的某种方法也是合理的。Maven无法知道哪一个在此正确并判定最接近的定义是决胜者。如果开发人员不喜欢这种选择,他可以添加一个直接的依赖关系,就像你观察到的那样。
我看不出有什么好的理由来做到这一点。它似乎比它节省更多的麻烦。
常春藤的默认依赖关系调解策略是“最新”,而不是“最接近”,并且它似乎在几乎所有情况下工作得很好。见http://ant.apache.org/ivy/history/2.2.0/settings/conflict-managers.html