dependencyManagement 的作用其实相当于一个对所依赖的 jar 包进行版本管理的管理器
在 maven 项目中,判断 jar 包的版本有两种途径
- 如果子项目的
<dependencies>
标签的子标签<dependency>
里面没有写<version>
标签,那么 maven 就会自动到父项目的<dependencyManagement>
标签里面去找有没有对该 artifactId 和 groupId 进行过版本声明,如果有,就继承它,如果没有就会报错,告诉你<dependency>
标签里面必须写一个<version>
标签 - 如果子项目的
<dependencies>
标签的子标签<dependency>
里面写了<version>
标签并指定了具体的版本,那么无论父项目的<dependencyManagement>
标签中有无对该 jar 包的 version 声明,都以子项目的 version 为准
总结
-
如果在父项目中只写了 dependencies 标签,那么即使在子项目中没有写 dependencies 标签,子项目仍然会从父项目中继承父项目中写的所有依赖
-
如果在父项目中使用了 dependencyManagement 标签,并且在子项目中没有写 dependencies 标签,那么父项目的所有依赖都不会被子项目继承;子项目如果需要引入依赖,必须自己写,当然如果你引入的依赖在父项目中也有,那么你可以不指定版本号,版本号会自动从父项目中继承,包括 scope 也是,如果子项目自己指定了,那么就使用子项目自己的
-
所以说 dependencyManagement 其实只是声明依赖,并不实际引入任何依赖,因此文章开头才说,它其实只是个管理 jar 包版本的管理器
//只是对版本进行管理,不会实际引入jar <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>3.2.7</version> </dependency> </dependencies> </dependencyManagement> //会实际下载jar包 <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </dependency> </dependencies>