标签在父工程的pom中定义,用于声明所依赖的jar包的版本号等信息,那么所有子项目再次引入此依赖jar包时则无需显式的列出版本号。Maven会沿着父子层级向上寻找拥有dependencyManagement 元素的项目,然后使用它指定的版本号。
例如:
在父工程pom.xml中定义如下声明:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
<version>1.2.3.RELEASEversion>
dependency>
dependencies>
dependencyManagement>
在子类工程中,无需再声明依赖版本:
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
该标签的好处是方便所有jar包版本的统一管理。
注意: dependencyManagement中定义的只是依赖的声明,并不实现引入,因此子项目需要显式的声明需要用的依赖。
例如:
<dependencies>
<dependency>
<groupId>org.sonatype.mavenbookgroupId>
<artifactId>persistence-depsartifactId>
<version>1.0version>
<type>pomtype>
dependency>
dependencies>
type默认的值是jar。即依赖某个jar包,以及jar包中所依赖的其他jar包,都会依赖进来。如果将type标签改为pom。那么意思就是不再依赖这个jar包本身,而是依赖这个jar包所定义的pom。将这个jar包pom中所依赖的jar都传递过来。如上面的配置,就是将persistence-deps.jar的pom里所依赖的内容,传递过来。
注意: type定义为pom,是将依赖jar包pom中中依赖的jar包都传递依赖过来。而 中的内容不会弄过来。
例如:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>project-AgroupId>
<artifactId>project-AartifactId>
<version>1.0version>
<scope>importscope>
<type>pomtype>
dependency>
...
dependencies>
dependencyManagement>
值写成import的意思是,将依赖jar包中pom的内容复制一份过来,而不是继承关系。如上配置,就是将A项目的内容复制一份到本项目,即使用A项目中定义的jar包版本。
注意: import不会将A项目具体的依赖项复制过来,他只是用了A项目的,不存在传递依赖现象。
需要和一起使用才生效,单独使用不行。即在有的情况下,如果配置了,那么就是复制对方的内容过来。如果没有,就是将对方的内容传递依赖过来。
补充: 下的只是用于声明版本的。如果想依赖jar包,需要在单独的中定义jar包声明。
在使用springboot时,通常工程有自己的父模块,而不能继承spring-boot-starter-parent时,文档推荐配置
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-dependenciesartifactId>
<version>2.1.12.RELEASEversion>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
我们看到,这里多了一个import,它的意思是将spring-boot-dependencies 中dependencyManagement的dependencies,全部引入到当前工程的dependencyManagement中。import只能用在dependencyManagement块中,它将spring-boot-dependencies 中dependencyManagement下的dependencies插入到当前工程的dependencyManagement中,所以不存在依赖传递。
当没有时,意思是将spring-boot-dependencies 的dependencies全部插入到当前工程的dependencies中,并且会依赖传递。