You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不更新子模块的前提下更新父/聚合POM版本?

问题场景

我有一个多模块Maven项目,父POM结构如下:

<project>
  <modelVersion>4.0.0</modelVersion>
 
  <groupId>com.example</groupId>
  <artifactId>my-parent</artifactId>
  <version>0.1.0</version>

  <modules>
    <module>module1</module>
    <module>module2</module>
    <!-- etc. -->
  </modules>
</project>

子模块的POM结构示例:

<project>
  <modelVersion>4.0.0</modelVersion>
 
  <groupId>com.example</groupId>
  <artifactId>module1</artifactId>
  <version>0.1.0</version>

  <parent>
    <groupId>com.example</groupId>
    <artifactId>my-parent</artifactId>
    <version>0.1.0</version>
  </parent>
</project>

我需要仅更新父POM的版本到0.2.0-SNAPSHOT,但保持子模块中<parent>节点引用的父版本仍为0.1.0。尝试过mvn versions:set搭配各种参数(包括-N标志)都没成功,想知道能不能用versions插件实现,或者有没有其他自动化的命令/插件方法(不能手动编辑POM)。

解决方案

方法1:使用versions插件的限定参数

直接在父POM所在目录执行以下命令:

mvn versions:set -DnewVersion=0.2.0-SNAPSHOT -N -DprocessAllModules=false
  • -N:仅针对当前父POM执行命令,不递归处理子模块
  • -DprocessAllModules=false:强制插件只修改当前POM的版本,避免联动更新子模块中的父版本引用

部分旧版本的versions插件在-N模式下仍会默认处理子模块的父节点引用,加上这个参数就能完全限定修改范围。

方法2:命令行文本替换(跨平台可选)

如果versions插件的方法仍不生效,可直接用文本替换工具修改父POM:

Linux/macOS(sed命令)

sed -i '' 's/<version>0.1.0<\/version>/<version>0.2.0-SNAPSHOT<\/version>/g' pom.xml

Windows(PowerShell命令)

(Get-Content pom.xml) -replace '<version>0.1.0</version>', '<version>0.2.0-SNAPSHOT</version>' | Set-Content pom.xml

这种方式直接定位父POM的版本节点替换,完全不会影响子模块文件。

内容的提问来源于stack exchange,提问作者Johan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 08:07:19