首页 > 解决方案 > 在 graph.getAllTask​​s().last() 上加载 intellij 中的 Gradle 更改,出现错误“无法从空列表访问 last() 元素”

问题描述

我打印了一个简单的语句,说明所有任务都已完成,并带有 gradle 中的时间戳。我们已经实现如下:

gradle.getTaskGraph().whenReady { graph ->
  graph.getAllTasks().last().doLast {

这一切似乎从命令行运行得非常好,但是在 intellij 中,当第一次加载 gradle 时,构建中断是由于

* 例外是:java.util.NoSuchElementException: 无法从空列表访问 last() 元素

这会阻止“外部库”被填充,因此智能感知和语法突出显示也会停止。它还会停止在 Gradle 视图中填充 Gradle 任务列表。

如果我删除用于打印此语句的代码块,那么一切都按预期工作,如果我重新引入代码,那么“加载 Gradle 更改”将失败并出现相同的错误,除了我现在可以毫无问题地运行任何 gradle 任务.

我是否错误地实现了 getTaskGraph().whenReady?如果我调试代码(在完成上述工作之后),我可以在图形对象中看到任务列表。这似乎只是 intellij 不喜欢的初始负载。

标签: gradleintellij-ideagroovy

解决方案


有一个相关问题:IDEA-256858 Can't import Gradle project in IDEA 2020.3: "Cannot access last() element from an empty List" taskGraph.allTask​​s 错误。

我猜,原因是TaskGraph在这个评估时刻确实是空的,所以代码抛出了这个异常。


推荐阅读