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

UpgradeParentVersion配方意外删除pom.xml中非父jar依赖版本问题

解决OpenRewrite更新父POM时意外删除依赖版本的问题

问题原因

你使用的org.openrewrite.maven.UpgradeParentVersion配方在更新父POM版本后,会触发Maven依赖的规范化检查:如果新父POM的dependencyManagement中已经定义了hsqldb的版本,OpenRewrite会自动移除项目中该依赖的显式<version>标签,转而使用父POM管理的版本。这是插件默认的优化行为,但不符合你的预期。

解决办法

方法1:修改配方,强制保留指定依赖的显式版本

在自定义配方中添加org.openrewrite.maven.KeepDependencyVersions步骤,指定要保留版本的依赖,覆盖插件的默认规范化行为:

# change the version of skernel-starter-parent from 5.1.27 to 6.0.6
type: specs.openrewrite.org/v1beta/recipe
name: com.test.skernel.migrate-to-6.0.6-set0
displayName: Change version of skernel-starter-parent
description: Changes the version of skernel-starter-parent from 5.1.27 to 6.0.6 and keeps hsqldb explicit version
recipeList:     
  - org.openrewrite.maven.UpgradeParentVersion:
      groupId: com.test.skernel
      artifactId: skernel-starter-parent
      newVersion: 6.0.6
  - org.openrewrite.maven.KeepDependencyVersions:
      groupId: org.hsqldb
      artifactId: hsqldb

方法2:执行命令时添加参数禁用依赖管理同步

无需修改配方,直接在Maven命令中添加参数阻止插件同步父POM的依赖管理配置:

mvn -U org.openrewrite.maven:rewrite-maven-plugin:dryRun -Drewrite.recipeArtifactCoordinates=com.hello.myproject:myproject-migration:5.0.30 -Drewrite.activeRecipes=com.test.skernel.migrate-to-6.0.6-set0 -Drewrite.maven.dependencyManagement.sync=false

方法3:调整父POM的依赖管理配置

如果项目不需要父POM管理hsqldb版本,可在父POM的dependencyManagement中移除该依赖的定义。但此方式会影响所有子项目,需谨慎操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 05:59:54