Maven中dependencyManagement标签的使用方法
Maven中的dependencyManagement元素提供了一种管理依赖版本号的方式,它用于声明所依赖的jar包的版本号等信息。当所有子项目再次引入这些jar包时,则无需显式的定义version属性。Maven会沿着父子层级向上寻找拥有dependencyManagement 元素的项目,然后继承它约定的版本号。
使用方法
pom文件中,有两种途径判断jar的版本号。
-
子项目未声明依赖版本号,则继承父项目中的。如果dependency标签未曾声明version元素,那么maven就会到父项目dependencyManagement标签里面去找该artifactId和groupId 的版本声明信息,如果找到了,就继承它;否则,就会抛出异常,告诉你必须为dependency声明version属性。
-
子项目定义的依赖版本号优先级高于父项目的。如果dependency标签声明了version属性,那么无论dependencyManagement中有无对该jar的version声明,都以dependency里的为准。
父项目定义
在父项目的POM.xml中配置dependencyManagement标签,定义基本的父依赖。这里仅仅定义一个Junit5的依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.demo</groupId>
<artifactId>springBoot</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>demo-demo</module>
</modules>
<!--打包方式pom-->
<packaging>pom</packaging>
<properties>
<junit-jupiter.version>5.5.2</junit-jupiter.version>
</properties>
<!-- 版本管理,导入需要的模块-->
<dependencyManagement>
<dependencies>
<!-- junit 5 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit-jupiter.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
</build>
</project>
子项目引用
在子项目中只需要写明groupId
和artifactId
就可以,版本号由Maven自动从父工程读取
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.demo</groupId>
<artifactId>springBoot</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.demo</groupId>
<artifactId>springBoot-sub</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<!-- junit 5 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
</build>
</project>
子项目覆盖统一版本
两种方式,一种直接在dependency中写明版本,如下所示
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.5.2</version>
<scope>test</scope>
</dependency>
另一种是覆盖版本号声明的属性,如下所示
<properties>
<junit-jupiter.version>5.5.2</junit-jupiter.version>
</properties>
这两种都可以