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

