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
相关产品推荐
相关产品推荐

