使用CommentOutSpringPropertyKey Recipe时抛出NoSuchMethodError错误求助
问题:CommentOutSpringPropertyKey执行报错NoSuchMethodError
执行org.openrewrite.java.spring.CommentOutSpringPropertyKey Recipe时抛出方法不存在错误,但ChangeSpringPropertyValue、AddSpringProperty等其他Spring相关Recipe可正常运行。
使用的Recipe
- org.openrewrite.java.spring.CommentOutSpringPropertyKey: propertyKey: spring.datasource.hikari.auto-commit comment: "Use Oracle JDBC driver connection property autoCommit."
报错信息
"src/main/resources/application.yaml","org.openrewrite.java.spring.CommentOutSpringPropertyKey","java.lang.NoSuchMethodError: 'void org.openrewrite.yaml.CommentOutProperty.<init>(java.lang.String, java.lang.String)' org.openrewrite.java.spring.CommentOutSpringPropertyKey.getVisitor(CommentOutSpringPropertyKey.java:53) org.openrewrite.scheduling.RecipeRunCycle.lambda$editSources$7(RecipeRunCycle.java:178) org.openrewrite.scheduling.RecipeStack.reduce(RecipeStack.java:57) org.openrewrite.scheduling.RecipeRunCycle.lambda$editSources$8(RecipeRunCycle.java:155) org.openrewrite.internal.InMemoryLargeSourceSet.lambda$edit$0(InMemoryLargeSourceSet.java:66) org.openrewrite.internal.ListUtils.map(ListUtils.java:243) org.openrewrite.internal.ListUtils.map(ListUtils.java:265) org.openrewrite.internal.InMemoryLargeSourceSet.edit(InMemoryLargeSourceSet.java:65) org.openrewrite.scheduling.RecipeRunCycle.editSources(RecipeRunCycle.java:154)"
可正常运行的Recipe示例
- org.openrewrite.java.spring.ChangeSpringPropertyValue: propertyKey: spring.datasource.driver-class-name newValue: oracle.jdbc.OracleDriver
当前pom.xml插件配置
<plugin> <groupId>org.openrewrite.maven</groupId> <artifactId>rewrite-maven-plugin</artifactId> <version>5.46.3</version> <configuration> <exportDatatables>true</exportDatatables> <activeRecipes> <recipe>com.oracle.spring.hikaritoucp</recipe> </activeRecipes> </configuration> <dependencies> <dependency> <groupId>org.openrewrite</groupId> <artifactId>rewrite-java</artifactId> <version>8.41.3</version> </dependency> <dependency> <groupId>org.openrewrite.recipe</groupId> <artifactId>rewrite-spring</artifactId> <version>5.24.1</version> </dependency> </dependencies> </plugin>
原因分析与解决方案
错误根源
该NoSuchMethodError是因为CommentOutSpringPropertyKey依赖的org.openrewrite.yaml.CommentOutProperty双参数构造方法在当前环境的依赖版本中不存在,属于组件版本不兼容问题:
- rewrite-spring 5.24.1中的
CommentOutSpringPropertyKey会调用CommentOutProperty(String propertyKey, String comment)构造方法,但当前项目中引入的rewrite-yaml版本(由插件或其他依赖间接引入)不包含该构造方法。 - 显式指定了rewrite-java和rewrite-spring的版本,但未指定rewrite-yaml版本,导致版本不一致。
解决方案
- 显式添加兼容版本的rewrite-yaml依赖:在rewrite-maven-plugin的dependencies中添加rewrite-yaml,版本与rewrite-java保持一致(8.41.3):
<dependency> <groupId>org.openrewrite</groupId> <artifactId>rewrite-yaml</artifactId> <version>8.41.3</version> </dependency>
- 验证版本兼容性:执行
mvn dependency:tree检查Maven依赖树,确认rewrite-spring、rewrite-java、rewrite-yaml无版本冲突。 - 统一升级依赖:若上述方法无效,可尝试将rewrite-maven-plugin、rewrite-java、rewrite-spring、rewrite-yaml升级到最新兼容版本,确保所有组件版本对齐。
内容的提问来源于stack exchange,提问作者Tallen67
相关产品推荐
相关产品推荐

