java多模块项目统一版本管理的核心是解耦版本值与声明:用${revision}在父pom定义版本值并供所有模块引用,通过dependencymanagement锁定第三方依赖版本,配合bom管理组件族版本,实现一处修改、全局生效。

Java 多模块项目中统一管理版本,核心是把“版本值”和“版本声明”解耦,避免在每个子模块的 pom.xml 里重复写死版本号。关键不在于改多少文件,而在于让所有模块共享同一套版本源头。
用 ${revision} 实现构建时动态版本(推荐 Maven 3.5+)
这是目前最轻量、最符合 CI/CD 场景的方式。只需在根 POM 的 <properties></properties> 中定义:
<revision>1.2.0-SNAPSHOT</revision>- 所有子模块的
<version></version>直接写成${revision} - 构建时可通过命令行覆盖:
mvn clean deploy -Drevision=1.2.0,自动同步全部模块版本 - 配合
${sha1}(Git commit hash),还能生成带溯源信息的制品名,如app-1.2.0-abc123.jar
用 dependencyManagement 锁定依赖版本
子模块之间或第三方库的版本混乱,90% 来自未做版本收敛。根 POM 中必须配置:
- 在
<dependencymanagement></dependencymanagement>下统一声明所有依赖的groupId、artifactId和version(可引用${spring.boot.version}等属性) - 子模块中只写
<dependency><groupid>org.springframework.boot</groupid><artifactid>spring-boot-starter-web</artifactid></dependency>,不写<version></version> - 这样既不引入实际依赖,又确保全项目使用完全一致的版本
提取公共属性到根 POM 的
除了 ${revision},其他常变项也应集中管理:
- JDK 编译版本:
<maven.compiler.source>17</maven.compiler.source> - 关键库版本:
<spring.boot.version>3.2.5</spring.boot.version>、<mysql.version>8.0.33</mysql.version> - 编码与插件参数等全局配置也放这里,避免各模块各自为政
搭配 BOM(Bill of Materials)管理组件族版本
当项目大量使用同一生态的多个模块(如 Guava、Spring Cloud、Apache Commons),BOM 是最佳实践:
- 引入官方或自建 BOM:
<dependency><groupid>com.google.guava</groupid><artifactid>guava-bom</artifactid><version>32.1.3-jre</version><type>pom</type><scope>import</scope></dependency> - 在
<dependencymanagement></dependencymanagement>的<imports></imports>块中导入,一次锁定整套组件版本 - 子模块按需引用任意 Guava 模块,无需再指定版本,天然防冲突
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











