You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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.6
  • io.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,更可控:

  1. 把这个yaml文件复制到项目根目录,重命名为quarkus-upgrade-recipe.yaml
  2. 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'
    }
    
  3. 执行手动升级:
    .\gradlew rewriteRun
    

4. 手动核心升级(最稳妥的备选方案)

如果自动升级始终卡住,直接手动升级核心BOM和扩展也是高效的方式:

  1. build.gradle中的quarkusPlatformVersion直接改成3.15.6.2
  2. 确保所有io.quarkus:*开头的扩展都不指定版本号(完全由BOM统一管理版本)
  3. 刷新依赖并检查冲突:
    .\gradlew dependencies --refresh-dependencies
    
  4. 编译项目,根据报错处理代码变更(可以参考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

另外提醒下,跨多个大版本升级后,一定要跑一遍所有单元测试和集成测试,确保核心功能不受影响~

火山引擎 最新活动