dependencymanagement 是 maven 多模块项目统一依赖版本的核心机制,它在父 pom 中集中声明 groupid、artifactid 和 version(不引入依赖),子模块在 dependencies 中仅声明坐标、省略 version 即可自动继承;支持 properties 定义变量、bom import 导入及 enforcer 插件校验,配合 dependency:tree 验证生效。

dependencyManagement 是 Maven 中用于统一管理依赖版本的机制,它本身不引入依赖,只“声明”版本规则。在多模块项目中,父 POM 使用 dependencyManagement 可以让所有子模块复用同一套依赖版本,避免版本冲突和重复声明。
在父 POM 中定义 dependencyManagement
在根模块(通常是 parent 模块)的 pom.xml 的 <dependencymanagement></dependencymanagement> 标签下集中声明依赖坐标和版本:
- 只写
<groupid></groupid>、<artifactid></artifactid>和<version></version>,无需<scope></scope>或<exclusions></exclusions>(除非想统一排除) - 推荐使用
<properties></properties>管理版本号,便于全局替换(例如<junit.version>5.10.0</junit.version>) - Spring Boot 项目可直接继承
spring-boot-dependencies,它已预置大量常用库的兼容版本
子模块中引用时省略版本号
子模块的 pom.xml 在 <dependencies></dependencies> 中声明依赖时,只需写 <groupid></groupid> 和 <artifactid></artifactid>:
- Maven 会自动匹配
dependencyManagement中定义的版本 - 如果子模块显式写了
<version></version>,会覆盖父级声明——这是允许的,但应避免,除非有特殊需求 - 若依赖未在
dependencyManagement中声明,子模块仍需自行指定版本,不会被“锁定”
支持 BOM 导入简化管理
除了手写 dependencyManagement,还可导入第三方 BOM(Bill of Materials)POM:
- 例如 Spring 官方 BOM:
<artifactid>spring-framework-bom</artifactid> - 在
dependencyManagement中用<type>pom</type>和<scope>import</scope>引入 - 这样既能复用权威版本组合,又保持父 POM 干净,适合大型项目或与标准生态对齐
验证是否生效的小技巧
运行 mvn dependency:tree -Dverbose 查看实际解析的依赖树:
- 若某依赖显示为 “(managed from X.X.X)” 就说明版本由
dependencyManagement控制 - 对比不同子模块的相同依赖版本是否一致,确认统一性
- 检查是否有 warning 提示 “omitted for conflict”,意味着存在版本冲突,可能某个子模块手动指定了不同版本
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











