今天在maven的pom文件中看到了dependencyManagement标签,用法如下:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
为什么要使用这个呢?maven官方给出的解释是:为了统一模块之间的依赖的版本。
有以下特点:
- 在父pom文件中声明
- 子模块中需要显式的声明,才会继承该依赖。
- 子模块如何需要继承该依赖,不需要指明版本,直接从父pom中获取版本号。
举个🌰:
顶层的父pom.xml文件:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>${javaee-api.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
子模块中的pom.xml
<!--继承父类-->
<parent>
<artifactId>父artifactId</artifactId>
<groupId>父groupId</groupId>
<version>父version</version>
<relativePath>父pom.xml的相对路径</relativePath>
</parent>
<!--依赖关系-->
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
</dependency>
</dependencies>
dependencies与dependencyManagement区别总结
1、dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)
2、dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项
,并且没有指定具体版本
,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号
,那么会使用子项目中指定的jar版本。
网友评论