Gradle 在测试期间跳过 JaCoCo

Gradle skip JaCoCo during test

我有一个测试任务间歇性失败的问题(我对此表示怀疑,因为 Jacoco 在测试期间触发了[生成报告])。

有没有办法在测试期间禁用 jacoco 的 运行?

我可以创建一个专门用于生成覆盖率报告的新任务(我也想知道如何完成)。在很多情况下,我并不需要测试覆盖率报告,而 运行 测试任务。

编辑


在阅读了第二个答案并亲自测试后,我非常建议并感谢下面的博客post,因为即使在禁用或删除任务后,检测仍然会发生.

https://poetengineer.postach.io/post/how-to-conditionally-enable-disable-jacoco-in-gradle-build


如果它在 Jenkins 上运行,错误 137 可能是内存不足问题。

如果它在 Jenkins 上运行,请尝试扩展内存并检查此 link。

I'm getting OutOfMemoryError

Jacoco 任务:

jacocoTestReport    -   JacocoReport    Generates code coverage report for the test task.
jacocoTestCoverageVerification  -   JacocoCoverageVerification  Verifies code coverage metrics based on specified rules for the test task.

要找出哪些任务具有哪些依赖项,您可以执行

gradle tasks --all

你可以用cmd排除任务

gradle test -x taskToExclude

您可以通过编程方式使用任务图来排除它

gradle.taskGraph.useFilter { task -> yourstuff}

或者简单地从测试任务依赖项中删除它

test.dependsOn.remove("jacocoTestReport")
test.dependsOn.remove("jacocoTestCoverageVerification")

其他值得检查的资源: https://docs.gradle.org/current/userguide/jacoco_plugin.html

我发现,如果您执行应用插件,那么即使您已按照已接受的答案中所述执行 dependsOn.remove,jacoco 检测也会发生。您可以看出检测仍在发生,因为即使未创建 jacoco 报告本身,也会创建一个名为 build/jacoco/test.exec 的文件。

我必须将 jacoco 插件提取到一个单独的 .gradle 文件并有条件地包含它,例如:

if (jacocoEnabled.toBoolean() )  {
  project.logger.lifecycle('applying jacoco build file')
  apply from: "jacoco.gradle"
}

然后我的 jacoco.gradle 文件看起来像:

apply plugin: 'java'
apply plugin: 'jacoco'


test {
  jacoco {
    append = false
    destinationFile = file("$buildDir/jacoco/test.exec")
  }
}

  jacocoTestReport {
      reports {
          xml.enabled true
          xml.destination file("${buildDir}${jacocoXMLDestination}")
      }
  }

  test.finalizedBy jacocoTestReport

这使我的构建时间从 4 分钟减少到 3 分钟 - 节省了一些时间。