如果Maven项目传递使用库的多个版本,Maven的依赖调解将通过声明中最接近的定义和顺序进行仲裁。 (参见docs。)
E.g。如果A - >; B - > X-1.0.0和A - > B - > C - > X-2.0.0,然后构建A将使用X-1.0.0。
为什么呢?可以合理地假设X-2.0.0添加了一些C使用的方法,因此运行A可能会产生运行时异常。选择最新版本会不会更有意义? (我知道你可以手动指定它。)
答案 0 :(得分:1)
假设2.x版本已删除 A或B使用的某种方法也是合理的.Maven在这种情况下无法知道哪个是正确的并且决定最近的定义是决胜局。如果开发人员不喜欢这个选择,他/她可以添加直接依赖,正如您所观察到的那样。
答案 1 :(得分:1)
我看不出有任何理由这样做。这似乎比它节省的麻烦更多。
Ivy的默认依赖调解策略是"最新",而不是"最近",它几乎在所有情况下似乎都运行良好。见http://ant.apache.org/ivy/history/2.2.0/settings/conflict-managers.html