Maven传递依赖的坑:父pom中dependencyManagement版本优先级高于传递依赖版本

一、由来

之前同事问了个问题,就是当前工程为spring boot项目,假设版本号为2.0.3

 

这个项目中依赖了一个spring boot项目依赖(先别管为啥有这么奇葩的依赖,这个版本是1.5.9)。

1.5.9的版本,会传递一堆starter过来。

结果最终看到的是,所有的starter版本都是2.0.3。

 

二、原因

maven官方有下面一段话:

https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

 

 翻译下:

Dependency management:允许项目作者直接指定artifact的版本,当该组件是通过传递依赖传递过来,或者为没有指定版本号的直接依赖。

 

再回头看前言里的问题,就是当前工程继承了spring boot parent 2.0.3,然后里面的<dependencyManagement>指定了各组件的版本号。这时候被依赖的1.5.9的组件,作为传递依赖,其版本号就会使用2.0.3.

 

三、参考

也有人遇到了同样问题:

https://blog.csdn.net/zwt0909/article/details/52372765

https://blog.csdn.net/jiaobuchong/article/details/81842503

 

posted @ 2019-02-18 13:42  三国梦回  阅读(11217)  评论(0编辑  收藏  举报