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

IntelliJ加载Gradle变更时调用graph.getAllTasks().last()报空列表错误

问题根因

这个报错不是你的whenReady用法错误,是IntelliJ首次同步Gradle项目的特殊机制导致的:

  • IntelliJ执行Gradle同步操作时,仅会解析项目结构、解析依赖坐标,不会生成完整的任务执行链路,此时graph.getAllTasks()返回的是空列表,直接调用last()就会触发空集合异常
  • 命令行执行Gradle任务、以及IntelliJ中后续运行Gradle任务时,都会生成完整任务图,所以不会触发该问题

修复方案

方案1:给原有逻辑增加空校验

直接在调用last()前判断任务列表是否非空,即可兼容IntelliJ同步场景:

gradle.getTaskGraph().whenReady { graph ->
  def allTasks = graph.getAllTasks()
  if (!allTasks.isEmpty()) {
    allTasks.last().doLast {
      // 你原有打印时间戳的逻辑
      println "所有任务执行完成时间戳:${System.currentTimeMillis()}"
    }
  }
}

方案2:使用更通用的构建结束钩子

如果你的需求是打印整个构建执行完成的时间戳,直接用Gradle自带的buildFinished生命周期钩子更稳妥,不需要依赖任务图的内容:

gradle.buildFinished { result ->
  // 可以根据result判断构建是否成功,按需打印
  println "构建执行完成时间戳:${System.currentTimeMillis()}"
  println "构建状态:${result.success ? '成功' : '失败'}"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 18:36:03