无法找到compileTestGroovy Gradle Build的循环依赖关系

2024-01-11

我收到了compileTestGroovy任务Gradle的stackOverflowError(https://docs.gradle.org/current/userguide/groovy_plugin.html https://docs.gradle.org/current/userguide/groovy_plugin.html)。堆栈跟踪错误:

Execution failed for task ':compileTestGroovy'.
> java.lang.StackOverflowError (no error message)

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':compileTestGroovy'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$3(ExecuteActionsTaskExecuter.java:186)
        at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:268)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:184)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:173)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:109)
        at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:62)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
        at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:41)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:411)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:398)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:391)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:377)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
Caused by: java.lang.StackOverflowError



compileGroovy 和 Gradle Groovy 插件的其他任务部分建造得很好。这只发生在测试任务中。我相信这是一种循环依赖,但我已经排除了 testImplementations 的所有依赖项,并且我不确定原因可能是什么。

这是完整的构建 gradle 文件 https://gist.github.com/SriVadrevu/b6d3e78da2620fa03ffb55487ea1d1cc

这是我的测试依赖项,只有 2 个:

testImplementation ("org.mockito:mockito-core:3.6.28") {
    transitive = false
  }
testImplementation('org.spockframework:spock-core:2.0-M5-groovy-3.0') {
    transitive = false
}

指出问题可能是什么(如果不是循环依赖)的指针也会非常有帮助。


我们遇到了完全相同的问题。我们执行测试的 CI 作业已经运行多年,没有出现此问题,但几周前的一天,它开始出现。起初我认为这可能是循环依赖,但现在我不确定。

最终的工作是将其放入 build.gradle 文件中(重点是“Xss”配置):

compileTestGroovy {
  configure(groovyOptions.forkOptions) {
    memoryMaximumSize = '3g'
    jvmArgs = ['-Xms1g', '-Xmx3g', '-Xss4M']
  }
}

我首先将 Xss 设置为“1M”,但这并没有解决问题。我将其设置为“4M”并且没有更多问题。

我将在这里写下我找到这个解决方案的发现过程,希望更有知识的人可以告诉我我是否正确。

我首先必须使用以下内容了解 StackOverflowError 是什么以及“堆”与“堆栈”之间的区别:

  • https://www.ibm.com/support/pages/diagnosing-javalangstackoverflowerror https://www.ibm.com/support/pages/diagnosing-javalangstackoverflowerror
  • https://www.youtube.com/watch?v=kYAyEQEcTVI https://www.youtube.com/watch?v=kYAyEQEcTVI(整个视频很棒,但前 10 分钟对于区分堆栈和堆非常有帮助)

基于此,我知道我们的团队使用 Spock 和一些本土测试框架来创建导致问题的测试。在数千次测试中使用了大量的 Spock 数据表和静态变量。

也许我们在使用静态变量和数据表(我认为存储在堆栈中?)添加另一个测试后终于达到了临界质量,然后开始触发此错误?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法找到compileTestGroovy Gradle Build的循环依赖关系 的相关文章

随机推荐