dependencyManagement 是 Maven 多模块项目统一控版的核心机制,通过父 POM 的 <dependencyManagement> 声明依赖版本、支持属性变量和 BOM 导入,子模块仅声明坐标不写 version,配合 Enforcer 插件校验与 dependency:tree 验证确保版本真正锁死。

dependencyManagement 是 Maven 多模块项目中统一控版的核心机制,它不直接引入依赖,而是为子模块提供“版本承诺”——只要子模块声明了该坐标,就自动采用父工程指定的版本。
在父 POM 中集中声明版本
把所有共用依赖的 groupId、artifactId 和 version 写进父工程的 <dependencyManagement> 块里。这里只做声明,不触发下载或编译依赖。
- 支持用
<properties>定义变量(如<lombok.version>1.18.32</lombok.version>),再在<dependencyManagement>中引用,改一个地方全局生效 - 对 Spring Cloud Alibaba 等 BOM 类型依赖,可用
<scope>import</scope>+<type>pom</type>整体导入其内部管理的全部版本 - 子模块即使被第三方库带入旧版(比如 log4j-core 2.14.1),只要父 POM 声明了 2.17.2,Maven 依赖调解规则就会优先采用这个版本
子模块只写坐标,不写 version
子模块自己的 <dependencies> 里,只需写 <groupId> 和 <artifactId>,绝对不要出现 <version> 标签。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 例如父 POM 锁定了
com.fasterxml.jackson.core:jackson-databind:2.15.3,子模块只需:
<dependency><br> <groupId>com.fasterxml.jackson.core</groupId><br> <artifactId>jackson-databind</artifactId><br></dependency>
- 若某个模块确需不同版本,可显式写出
<version>覆盖,但必须加注释说明原因,避免破坏整体一致性
用 Enforcer 插件防止手误
<dependencyManagement> 管得住声明,管不住人写错。Enforcer 插件能自动拦截违规行为:
立即学习“Java免费学习笔记(深入)”;
- 在父 POM 的
<build><plugins>中配置,启用banDuplicatePomDependencyVersions或自定义校验规则 - 运行
mvn enforcer:enforce可提前发现:子模块私自写了<version>、传递依赖引入了未授权版本等问题 - 建议在 CI 流水线中强制执行,把问题挡在构建阶段
验证是否真正锁死
配置写完不等于生效,必须验证实际解析结果:
- 执行
mvn dependency:tree -Dverbose -Dincludes=org.apache.logging.log4j:log4j-core - 查看输出中
resolved to后面的版本号,确认是你在父 POM 中声明的那个 - 注意区分
omitted for duplicate和omitted for conflict——前者说明版本已统一,后者可能意味着锁定未生效

















