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

如何批量更新pom.xml中groupId为org.springframework且版本低于2.3.18的依赖版本?

正确更新Spring依赖版本的解决方案

你的sed命令没生效主要有几个问题:一是匹配错了节点(你写的是匹配artifactId为org.springframework,但实际要找的是groupId),二是替换语法有错误(多写了一个<version>/,导致sed解析失败),三是没限定修改的范围在对应的dependency块里。

我给你两个可行的方案,优先推荐用Maven官方插件(更安全,避免xml格式变化导致的问题),也会给你修正后的sed命令:

方案一:使用Maven Versions插件(推荐)

这是处理Maven依赖版本最可靠的方式,不会因为xml的换行、空格差异出问题。执行以下命令即可批量更新所有org.springframework的依赖到2.3.18版本:

mvn versions:use-dep-version -DgroupId=org.springframework -DartifactId=* -DdepVersion=2.3.18 -DgenerateBackupPoms=false

参数说明:

  • -DgroupId=org.springframework:指定要修改的依赖groupId
  • -DartifactId=*:匹配该groupId下的所有artifactId
  • -DdepVersion=2.3.18:目标版本号
  • -DgenerateBackupPoms=false:不生成备份的pom.xml文件(如果需要备份可以去掉这个参数)

方案二:修正后的sed命令

如果你一定要用sed,下面的命令可以正确完成需求:

sed -i '/<groupId>org.springframework<\/groupId>/,/<\/dependency>/ s/<version>.*<\/version>/<version>2.3.18<\/version>/g' pom.xml

命令解释:

  1. /<groupId>org.springframework<\/groupId>/,/<\/dependency>/:限定修改范围在包含Spring groupId的dependency块内,从groupId行到对应的</dependency>行
  2. s/<version>.*<\/version>/<version>2.3.18<\/version>/g:在上述范围内,把所有的version节点内容替换成目标版本号

执行后,你的pom.xml会变成你期望的样子:

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <version>2.3.18</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-beans</artifactId>
  <version>2.3.18</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>2.3.18</version>
</dependency>
<dependency>
  <groupId>org.json</groupId>
  <artifactId>jasypt</artifactId>
  <version>1.9.2</version>
</dependency>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 17:59:06