一般只有父pom文件中才有dependencyManagement.
- dependencies:子POM会完全继承父POM中声明的dependencies,如果子POM中没有声明某个依赖项,但是父POM中声明了该依赖项,就会直接从父POM中继承该依赖项,如果子POM也声明另外相同依赖包,那么子POM会覆盖父POM中依赖声明。
- dependencyManagement里只是声明依赖,并不实现引入,除非子POM显示声明需要用该依赖项。如果不在子POM中声明依赖,是不会从父POM中继承依赖的;只有在子POM中声明了该依赖项,并且没有指定具体版本,才会从父POM中继承该项,并且version和scope都读取自父POM;另外如果子POM中指定了版本号,那么会使用子POM中指定的jar版本。
- dependencyManagement这么做的好处:
如果有多个子项目都引用同一依赖,则可以避免在每个使用的子项目中都声明一个版本号,这样当想升级或切换到另一个版本时,只需要在顶层父容器里更新,而不需要一个个子项目修改;另外如果某个子项目需要另外的版本,只需要声明version即可.