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。
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 分钟 - 节省了一些时间。
我有一个测试任务间歇性失败的问题(我对此表示怀疑,因为 Jacoco 在测试期间触发了[生成报告])。
有没有办法在测试期间禁用 jacoco 的 运行?
我可以创建一个专门用于生成覆盖率报告的新任务(我也想知道如何完成)。在很多情况下,我并不需要测试覆盖率报告,而 运行 测试任务。
编辑
在阅读了第二个答案并亲自测试后,我非常建议并感谢下面的博客post,因为即使在禁用或删除任务后,检测仍然会发生.
https://poetengineer.postach.io/post/how-to-conditionally-enable-disable-jacoco-in-gradle-build
如果它在 Jenkins 上运行,错误 137 可能是内存不足问题。
如果它在 Jenkins 上运行,请尝试扩展内存并检查此 link。
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 分钟 - 节省了一些时间。