maven依赖仲裁

模块化的问题是无法避免的一个问题。这里有一个案例是项目里依赖了b组件,b组件依赖了a组件1.0.2版本,而用户也直接在pom依赖了a组件并声明的1.0.0版本,结果在仲裁时选择了1.0.0版本的a组件:

[code]+- com.xxx:a:jar:1.0.0:compile
|
+- …
| +- …
|
+- com.xxx:b:jar:1.0.0:compile
| |
| +- (com.xxx:a:jar:1.0.2:compile – omitted for duplicate)[/code]

对于依赖某个组件的多个版本,maven的仲裁过程,并不是简单的使用高版本,而是根据从根节点到各个组件节点之间的路径深度,路径短的组件优先,如果路径深度相同,则是先发现的那个。类似一棵树的广度遍历。

总结一下Maven的依赖仲裁原则:第一原则:最短路径优先;补充原则:优先声明;对于补充原则并不可靠,如碰上pom重构调整顺序后可能导致问题再次出现,这个点需要注意。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据