在使用maven去build项目时,很多时候会在parent的pom文件中看到如下代码:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
<version>2.0.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<version>2.0.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test-autoconfigure</artifactId>
<version>2.0.1.RELEASE</version>
</dependency>
</dependencyManagement>
那么<dependencyManagement>与<dependency>有什么区别呢?
- <dependency>是用于直接引入jar,需要实际导入到classpath中。
- <dependencyManagement>相当于对依赖进行版本的管理,并不会直接下载需要的依赖。而只是做一个版本的引用记录。它的目的主要是统一jar的引用(多个module)。因此,此标签通常是在parent中。
那么<dependencyManagement>与<dependency>有什么联系呢?
- 当使用<dependency>引入依赖的时候,可以不设置<version>。这个时候,就从<dependencyManagement>去查找对应的依赖,如果存在,则直接下载对应的版本依赖。如果没有,则会报错并提示设置<version>。
- 如果<dependency>设置了版本号,则会下载对应的版本jar而忽略<dependencyManagement>的依赖管理。