Gradle 8.4+Java21在TeamCity构建阻塞:无法推进任务执行
问题:升级Java 21和Gradle 8.4后TeamCity构建死锁失败
我们将基于Selenium-Java-Gradle的自动化测试项目部署在TeamCity CI服务器,近期把Java版本升级至21、Gradle版本升级至8.4后,本地测试无任何异常,但TeamCity构建被标记为失败,报错信息如下:
Unable to make progress running work. The following items are queued for execution but none of them can be started: 10:49:51 - Build ':': 10:49:51 - Waiting for nodes: 10:49:51 - :build (state=SHOULD_RUN, dependencies=NOT_COMPLETE, group=task group 2, dependencies=[:assemble (SHOULD_RUN), :check (EXECUTED)], waiting-for=[:assemble (SHOULD_RUN)], has-failed-dependency=false ) 10:49:51 - :clean (state=SHOULD_RUN, dependencies=COMPLETE_AND_SUCCESSFUL, group=task group 1, dependencies=[Resolve mutations for :clean (EXECUTED), producer locations for task group 0 (EXECUTED)], has-failed-dependency=false ) 10:49:51 - Nodes ready to start: 10:49:51 - :jar 10:49:51 - :clean 10:49:51 - Reachable nodes: 10:49:51 - :jar (state=SHOULD_RUN, dependencies=COMPLETE_AND_SUCCESSFUL, group=task group 2, dependencies=[Resolve mutations for :jar (EXECUTED), destroyer locations for task group 1 (EXECUTED), :classes (EXECUTED), :compileJava (EXECUTED)], has-failed-dependency=false ) 10:49:51 - :assemble (state=SHOULD_RUN, dependencies=NOT_COMPLETE, group=task group 2, dependencies=[:jar (SHOULD_RUN)], waiting-for=[:jar (SHOULD_RUN)], has-failed-dependency=false ) 10:49:51 - Scheduling events: 10:49:51 - node added to plan: destroyer locations for task group 0, when: scheduled, state: SHOULD_RUN, dependencies: 0, is ready node? true 10:49:51 - node added to plan: destroyer locations for task group 1, when: scheduled, state: SHOULD_RUN, dependencies: 2, is ready node? false 10:49:51 - node added to plan: producer locations for task group 0, when: scheduled, state: SHOULD_RUN, dependencies: 5, is ready node? false 10:49:51 - Ordinal groups: 10:49:51 - group 0 entry nodes: [:test (EXECUTED)] 10:49:51 - group 1 entry nodes: [:clean (SHOULD_RUN)] 10:49:51 - group 2 entry nodes: [:build (SHOULD_RUN)] 10:49:51 - Workers waiting for work: 4 10:49:51 - Stopped workers: 0 10:49:51 java.lang.IllegalStateException: Unable to make progress running work. There are items queued for execution but none of them can be started
可能的原因
- Gradle任务调度逻辑冲突:Gradle 8.x对任务分组、并行执行的调度机制做了调整,结合TeamCity的构建环境,可能出现任务分组间的依赖死锁。从报错可见,
:clean任务已处于可执行状态,但因为分组优先级或调度规则的问题,未被分配给空闲worker,导致后续任务无法推进。 - TeamCity Gradle插件版本过低:TeamCity的Gradle运行插件如果未同步升级,无法适配Gradle 8.4的新调度模型。旧版本插件对Gradle 8.x的任务依赖解析、分组执行支持存在缺陷,引发调度异常。
- Java环境配置不一致:虽然本地Java 21运行正常,但TeamCity agent端的Java环境可能未正确切换到21,或者TeamCity服务器与构建任务使用的JVM版本不匹配,导致Gradle调度逻辑出现隐性错误。
- 自定义任务依赖的兼容性问题:如果项目中自定义了
build/assemble等核心任务的依赖关系,Gradle 8.x对依赖验证的严格性提升,在本地缓存环境下未暴露问题,但在TeamCity的干净构建环境中,这种自定义配置会触发调度死锁。
内容的提问来源于stack exchange,提问作者mahadi hasan
相关产品推荐
相关产品推荐

