Когда я пытаюсь собрать свой мульти-проект в режиме отладки intelliJ, я заканчиваю бесконечную сборку, что означает, что некоторые потоки (работники исполнения) будут выполнять их в течение бесконечного времени.
Прежде всего, я посмотрел в дамп потока.Я видел, что каждый поток, который заканчивается в бесконечном состоянии, имеет одну и ту же трассировку стека:
"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
Кроме того, я видел, что только задачи типаTest
или JavaExec
затронуты.В целом все задачи типа JavaForkOptions
.И я увидел, что я не получил следующее сообщение от IntelliJ для этих потоков, которое заканчивается в бесконечном состоянии:
Подключено к виртуальной машине, запущенной ': my-project: geb: test '(localhost: 61041).Откройте вкладку сеанса отладчика
(например).
Какая задача закончится в бесконечном состоянии, недетерминирована, и когда я собираю всю сборку gradle со свойством org.gradle.parallel=false
, тогда сборка завершена успешно.Когда я запускаю эту сборку без режима отладки, все работает нормально.Я должен отметить, что этот код сценария 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