dependencyManagement 与 dependencies 的区别
dependencies
- 直接依赖声明:在 `` 中使用场景
- 自动引入:所有列出的依赖都会被包含在项目中
- 版本必需:每个依赖必须指定版本号(除非在父POM的dependencyManagement中已定义)
- 作用范围:仅影响当前项目
dependencyManagement
- 依赖管理:只是声明依赖及其版本等信息,不实际引入依赖
- 版本控制中心:为子模块提供统一的版本管理
- 可选引入:子模块需要显式声明依赖(可不写版本号)才会真正引入
- 继承性:主要在父POM中使用,供子模块继承
-
父POM:通常同时使用两者
dependencyManagement统一管理版本dependencies声明父项目自身需要的依赖
-
子模块:
- 只需 `` 声明实际需要的依赖(可省略版本号)
- 从父POM继承版本控制
示例
父POM:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.8</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
子模块:
<dependencies>
<!-- 从父POM继承版本 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
<!-- 需要其他依赖时指定 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.8</version>
</dependency>
</dependencies>
这种机制有助于在多模块项目中统一管理依赖版本,避免版本冲突。声明的依赖会被项目直接使用