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

使用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版本,导致版本不一致。

解决方案

  1. 显式添加兼容版本的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>
  1. 验证版本兼容性:执行mvn dependency:tree检查Maven依赖树,确认rewrite-spring、rewrite-java、rewrite-yaml无版本冲突。
  2. 统一升级依赖:若上述方法无效,可尝试将rewrite-maven-plugin、rewrite-java、rewrite-spring、rewrite-yaml升级到最新兼容版本,确保所有组件版本对齐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 14:47:28