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

使用Gradle执行OpenRewrite Recipe始终无法完成的问题排查

问题排查与解决建议

1. 依赖解析错误是核心阻塞原因

你遇到的ModuleVersionNotFoundException是关键问题——OpenRewrite需要完整解析项目的依赖树来构建Java代码的抽象语法树(AST),一旦有依赖无法找到,它会持续尝试解析或陷入等待状态,直接导致任务卡在99%无法推进。

  • 问题根源:你在afterEvaluate中仅给空仓库的项目添加内部仓库,但很多子项目可能已有仓库配置,但缺少你的内部Artifactory地址;或者Rewrite插件自身的依赖解析没有使用正确的仓库。
  • 解决办法:
    • 移除repositories.isEmpty()的判断,强制给所有项目(包括子项目)添加内部仓库和mavenCentral:
      afterEvaluate {
          repositories {
              maven { url = uri('https://our/artifactory/repo') }
              mavenCentral()
          }
      }
      
    • 检查WSL环境下的Gradle配置(~/.gradle/gradle.properties或项目根目录的gradle.properties),确保已配置Artifactory的访问凭证,避免因权限问题导致依赖拉取失败。

2. 排除规则可能未生效,导致扫描冗余文件

你的排除配置"**/generated/**"可能没有精准匹配到生成的Java文件,导致OpenRewrite扫描大量无需处理的生成代码,拖慢甚至卡住任务。

  • 调整排除规则:修改为更精准的路径匹配,同时注意Gradle插件中OpenRewrite的排除配置需用复数exclusions:
    rewrite {
        activeRecipe("org.openrewrite.java.RemoveUnusedImports")
        exportDatatables = true
        exclusions = [
            "**/generated/**/*.java",
            "**/build/generated/**"
        ]
    }
    

3. 关闭Gradle并行执行,避免资源竞争

大型多模块项目开启并行执行时,Rewrite任务的依赖解析和代码扫描可能出现资源竞争,导致任务挂起。执行命令时添加--no-parallel参数:

wsl ./gradlew --no-parallel --init-script unused-imports.gradle rewriteDryRun

4. 固定OpenRewrite版本,避免最新版本的不稳定问题

使用latest.release可能引入未经过充分测试的版本,存在兼容性或性能问题。替换为稳定版本,例如:

initscript {
    repositories {
        maven { url "https://plugins.gradle.org/m2" }
    }
    dependencies { classpath("org.openrewrite:plugin:5.40.0") }
}

5. 清理Gradle缓存,排除缓存污染

旧的依赖缓存可能导致解析异常,先清理缓存再执行任务:

wsl ./gradlew clean buildCacheClean --init-script unused-imports.gradle rewriteDryRun

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 20:22:13