多模块项目模块依赖版本统一管理及Maven发布适配
统一多模块Maven项目版本并适配Release Plugin的方案
我来给你梳理一下最靠谱的解决方案,刚好我之前处理过不少这类多模块Maven项目的版本管理问题,完美匹配你“避免重复维护+适配Release Plugin”的需求:
核心思路
通过父POM统一管理项目版本,子模块继承父POM的版本,同时在模块间依赖时使用动态版本引用,这样既能彻底消除版本号重复,又能让Maven Release Plugin自动完成SNAPSHOT到正式版本的切换。
具体配置步骤
1. 配置父POM
首先确保你的项目有一个作为“版本中枢”的父POM,它的packaging类型必须是pom,并且在<modules>里声明所有子模块(A和B):
<!-- 父POM的核心配置 --> <groupId>com.yourcompany</groupId> <artifactId>parent-project</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>module-b</module> <module>module-a</module> </modules>
这里的<version>就是整个项目的统一版本号,所有子模块都会继承这个值。
2. 子模块POM配置
不管是模块A还是模块B,它们的POM都要继承父POM,并且不要自己写<version>标签(自动继承父版本):
<!-- 模块A/B的parent配置 --> <parent> <groupId>com.yourcompany</groupId> <artifactId>parent-project</artifactId> <version>1.0.0-SNAPSHOT</version> </parent> <artifactId>module-a</artifactId> <!-- 这里不需要写<version>,自动继承父POM的版本 -->
然后在模块A的POM里,声明对模块B的依赖时,版本号直接用${project.version}:
<!-- 模块A中对模块B的依赖配置 --> <dependencies> <dependency> <groupId>com.yourcompany</groupId> <artifactId>module-b</artifactId> <version>${project.version}</version> </dependency> </dependencies>
3. 适配Maven Release Plugin
当你执行Maven Release的标准命令时:
mvn release:prepare:插件会自动遍历所有模块,把父POM的版本从1.0.0-SNAPSHOT替换成正式版本(比如1.0.0),同时所有子模块依赖里的${project.version}也会被替换成对应的正式版本。mvn release:perform:插件会构建并部署正式版本,之后还可以自动把项目版本更新为下一个SNAPSHOT(比如1.0.1-SNAPSHOT),全程不需要手动修改任何版本号。
为什么这是最优解?
- 彻底避免重复维护:所有版本变更只需要修改父POM的
<version>,子模块和模块间依赖会自动同步,再也不用在多个POM里改相同的版本号。 - 完美适配Release Plugin:插件原生支持
${project.version}这种动态版本引用,能自动完成版本切换、快照替换等操作,完全符合Maven的版本管理规范。
注意事项
- 不要在子模块里硬写版本号,必须通过继承父POM来获取版本。
- 如果项目还有第三方依赖的版本需要统一管理,可以在父POM的
<dependencyManagement>里集中配置,和内部模块版本管理逻辑互补。
内容的提问来源于stack exchange,提问作者JF Meier
相关产品推荐
相关产品推荐

