Gradle在无限状态下构建,但仅在智能调试模式下

时间:2019-06-20 09:08:10

标签: java debugging gradle intellij-idea

当我尝试以intelliJ的调试模式构建多项目时,我将以无限构建结尾,这意味着某些线程(执行工作者)将在无限时间内执行它们。

首先,我调查了Thread dump。我看到以无限状态结尾的每个线程都具有相同的堆栈跟踪:

"Execution worker for ':' Thread 5" #51 prio=5 os_prio=0 tid=0x000000002918e800 nid=0x4104 runnable [0x000000002e93c000]
   java.lang.Thread.State: RUNNABLE
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
        at java.net.SocketInputStream.read(SocketInputStream.java:171)
        at java.net.SocketInputStream.read(SocketInputStream.java:141)
        at java.net.SocketInputStream.read(SocketInputStream.java:224)
        at com.intellij.openapi.externalSystem.rt.execution.ForkedDebuggerHelper.send(ForkedDebuggerHelper.java:48)
        at com.intellij.openapi.externalSystem.rt.execution.ForkedDebuggerHelper.setupDebugger(ForkedDebuggerHelper.java:24)
        at com.intellij.openapi.externalSystem.rt.execution.ForkedDebuggerHelper$setupDebugger$0.call(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:115) 
...

Full Trace Here

我还看到,只有TestJavaExec类型的Tasks受到影响。总体而言,类型为JavaForkOptions的所有任务。而且我看到,我 didnt 从IntelliJ获得了这些线程的以下消息,这些消息最终处于无限状态:

已连接到由':my-project:geb:test'(localhost:61041)启动的VM。打开调试器会话标签

(例如)。

哪个任务将以无限状态结束是不确定的,因此当我使用属性org.gradle.parallel=false构建整个gradle构建时,构建将成功完成。当我在没有调试模式的情况下运行此构建时,一切正常。 我应该提到,对于这些无限状态线程,也不会执行此gradle脚本代码:

gradle.taskGraph.beforeTask { Task task ->
    if (task instanceof JavaForkOptions) {
        print('JvmArgs For Forking' + task.jvmArgs + ' -- in Task ' + task.getName() + '\n')
    }
}

我将Java 8更新为java8_211,并尝试将gradle从5.4.1降级到4.10.3,但是它也不起作用。

编辑:我向JetBrains报告了此问题,他们已经有票了。 https://youtrack.jetbrains.com/issue/IDEA-207748

0 个答案:

没有答案