一、介绍
dependencies元素是Maven工程提供的元素用来进行项目依赖的配置和管理。
而dependencyManagement元素是Maven工程提供的元素用来进行统一依赖版本。
二、dependencyManagement解释:
在pom.xml中使用dependencyManagement元素,能让所有子项目中引用一个依赖而不用在子项目中列出版本号。Maven会根据父子关系,由子向父查找,直到找到一个拥有dependencyManagement元素的项目,然后使用dependencyManagement元素中指定的依赖版本。
三、如何使用dependencyManagement元素:
pom.xml:
父工程:
dependencyManagement(通常在父工程中定义):
<dependencyManagement>
<dependencies>
<!--mysql数据库依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
<!--其他依赖 ...-->
</dependencies>
</dependencyManagement>
子工程:
dependencies:
<dependencies>
<!--mysql数据库依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
上述pom.xml文件中子工程引入mysql依赖但没有列出版本号,而其父工程中使用了dependencyManagement元素,所以Maven会自动向父工程找到mysql8.0.11版本的依赖给子工程。
而如果子过程需要指定新的版本号,则只需要在子工程列出新的版本号就可以了,这时候子工程使用的mysql依赖版本为新的版本号。如下:
子工程pom.xml文件:
<dependencies>
<!--mysql数据库依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
</dependencies>
四、总结
使用dependencyManagement元素的好处:
- 当整个项目需要更换某一个依赖的版本时,直接在父工程的dependencyManagement元素对应依赖里更新需要的依赖版本号就行,而不需要将一个个子项目的依赖进行更新。
- 如果一个子工程需要另外一个版本时,只需要在dependencies元素对应依赖中声明对应的版本号即可。
五、注意
- dependencyManagement里只是声明依赖,而不是实现依赖,因此需要子工程声明对应的依赖,但子工程不需要声明版本。
- 如果子工程不声明依赖,是不会从父工程中继承下来的,只有子过程声明了依赖并且没有指定版本号,才会从父工程中继承该依赖版本,且version和scope都读取自父工程。
- 如果子工程指定了依赖版本,则使用子工程定义的依赖版本。
- 当父工程导入dependencyManagement元素时,如果你的本地仓库或者你之前没有下载过对应的版本,父工程中的依赖就会爆红,这时候需要先删掉dependencyManagement元素,让Maven先下载依赖,再加上dependencyManagement元素即可。