Gradle quarkusUpdate命令从Quarkus 3.8.6升级时长期卡在0% EXECUTING无进展
Gradle quarkusUpdate命令从Quarkus 3.8.6升级时长期卡在0% EXECUTING无进展
我之前跨版本升级Quarkus时也碰到过类似的卡死问题,结合你提供的日志和项目配置,给你几个实际可落地的排查和解决步骤:
1. 先处理无兼容性信息的扩展
从你的日志能看到,有两个扩展在目标Quarkus平台中没有兼容性数据:
io.quarkus:quarkus-smallrye-reactive-messaging-kafka:3.8.6io.quarkus:quarkus-oidc-token-propagation:3.8.6
OpenRewrite在处理这类未兼容扩展时,很可能会因为无法确定安全升级路径而挂起。你可以先临时注释掉这两个扩展的依赖,再重新运行升级命令;等核心BOM和其他扩展升级完成后,再把它们加回项目,并手动同步到3.15.6.2版本(这两个扩展在3.15版本中均正常维护,直接用BOM管理的版本即可)。
2. 增加Gradle内存并开启详细日志
内存不足或看不到执行细节是常见的卡死原因,你可以先调整Gradle启动参数,再用日志模式运行升级:
- 在PowerShell中设置内存参数(避免内存溢出):
$env:GRADLE_OPTS="-Xmx4g -XX:MaxMetaspaceSize=512m" - 用详细日志模式执行升级,这样能看到具体卡在哪一步:
.\gradlew quarkusUpdate -i
3. 手动执行生成的OpenRewrite Recipe
既然系统已经生成了临时的升级Recipe文件(路径是C:\Users\XXXXXX~1\AppData\Local\Temp\quarkus-project-recipe-11608578851276256669.yaml),你可以跳过自动执行流程,手动调用OpenRewrite来运行这个Recipe,更可控:
- 把这个yaml文件复制到项目根目录,重命名为
quarkus-upgrade-recipe.yaml - 在
build.gradle中添加OpenRewrite插件配置(和日志中兼容的版本):plugins { // 保留原有插件,新增以下配置 id 'org.openrewrite.rewrite' version '7.12.1' } rewrite { activeRecipe(file('quarkus-upgrade-recipe.yaml')) } dependencies { rewrite platform("org.openrewrite.recipe:rewrite-recipe-bom:2.0.0") rewrite 'io.quarkus:quarkus-updates-recipes:1.5.2' } - 执行手动升级:
.\gradlew rewriteRun
4. 手动核心升级(最稳妥的备选方案)
如果自动升级始终卡住,直接手动升级核心BOM和扩展也是高效的方式:
- 把
build.gradle中的quarkusPlatformVersion直接改成3.15.6.2 - 确保所有
io.quarkus:*开头的扩展都不指定版本号(完全由BOM统一管理版本) - 刷新依赖并检查冲突:
.\gradlew dependencies --refresh-dependencies - 编译项目,根据报错处理代码变更(可以参考Quarkus官方从3.8到3.15的版本升级指南,重点关注3.10、3.12等中间版本的Breaking Changes)
5. 检查Windows临时目录权限
你的Recipe生成在系统Temp目录,可能存在权限不足导致执行时无法读写的情况:
- 手动指定一个你有完全读写权限的临时目录,比如项目下的temp文件夹:
$env:TMP="C:\your-project-path\temp" $env:TEMP="C:\your-project-path\temp" - 然后重新运行
.\gradlew quarkusUpdate
另外提醒下,跨多个大版本升级后,一定要跑一遍所有单元测试和集成测试,确保核心功能不受影响~




