Maven中dependencyManagement标签的使用方法

By | 2023年7月27日

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>

子项目引用

在子项目中只需要写明groupIdartifactId就可以,版本号由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>

这两种都可以