最近再看项目的时候,无意间注意到项目中的pom文件既有dependencyManagement,也有dependencies,有点疑惑为什么要同时有这两个标签,可能之前没太注意过吧。
dependencies与dependencyManagement的区别:
a,dependencies标签 在父项目中定义的所有依赖,都是直接引入使用的,并且子项目中也有自动的继承此依赖。
b,dependencyManagement标签 在父项目中定义的依赖,不会直接引入使用的,只有当子项目中也引入了此依赖了,父项目中才会真实的引入使用此依赖,并且子项目默认是不会继承dependencyManagement标签定义的依赖的。
总结:dependencies 即直接导入依赖,并且子项目继承此依赖;dependencyManagement 只是定义了依赖,并未导入使用依赖,子项目默认不继承此依赖。
父项目:
上图是父项目的pom文件,可以看到dependencies标签定义的依赖,右侧就出现了,说明项目是直接导入使用的,而dependencyManagement标签定义的依赖,右侧是没有出现的。
子项目:
可以看到子项目中默认继承了hutool依赖。
下面再来尝试一种情况,在子项目中手动定义 hibernate-validator 依赖,但是不写版本号,会怎么样
可以看到,即使我子项目中定义了hibernate-validator依赖没有写版本号,实际上导入此依赖时,指定了版本号,而且这个版本号是和父项目中dependencyManagement 标签定义的依赖版本号是一样的,这就说明了,dependencyManagement 标签是一个依赖的版本管理器,可以控制子项目中的所有依赖的版本,但是如果子项目要是指定了版本,那就以子项目为主了。