如何批量更新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
命令解释:
/<groupId>org.springframework<\/groupId>/,/<\/dependency>/:限定修改范围在包含Spring groupId的dependency块内,从groupId行到对应的</dependency>行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
相关产品推荐
相关产品推荐

