Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
整个项目级别(而非模块级别)的Jacoco Gradle最低代码覆盖率阈值_Gradle_Code Coverage_Jacoco - Fatal编程技术网

整个项目级别(而非模块级别)的Jacoco Gradle最低代码覆盖率阈值

整个项目级别(而非模块级别)的Jacoco Gradle最低代码覆盖率阈值,gradle,code-coverage,jacoco,Gradle,Code Coverage,Jacoco,我们的项目使用Gradle 3.5,jacoco 0.8.1 分为A、B、C三个模块,代码覆盖率分别为50%、6%和42%,整个项目的代码覆盖率为38% 现在我们想使用整个项目的当前代码覆盖率作为阈值,这意味着如果整个项目的代码覆盖率小于38%,构建将失败 我试过了这个解决办法 但失败了,提示模块B违反了规则,指令覆盖率为0.06,expect为0.38,似乎只适合模块级,而不适合整个项目级 我还尝试使用element='GROUP',但似乎没有效果。 () 有人知道如何为整个项目而不是模块级

我们的项目使用Gradle 3.5,jacoco 0.8.1

分为A、B、C三个模块,代码覆盖率分别为50%、6%和42%,整个项目的代码覆盖率为38%

现在我们想使用整个项目的当前代码覆盖率作为阈值,这意味着如果整个项目的代码覆盖率小于38%,构建将失败

我试过了这个解决办法

但失败了,提示模块B违反了规则,指令覆盖率为0.06,expect为0.38,似乎只适合模块级,而不适合整个项目级

我还尝试使用element='GROUP',但似乎没有效果。 ()

有人知道如何为整个项目而不是模块级别设置最小代码覆盖率阈值吗


谢谢,

我建议在您的多模块构建中有一个单独的项目(模块),用于报告整个项目。您可能还需要
JacocoMerge
任务。让我们假设a、b和c是java项目。乙二醇

例如:


是的,我找到了另一个解决方案,那就是在每个模块中编写限制规则,例如对于模块A,其代码覆盖率为50%,因此在模块A的build.gradle文件中,规则如下:

// for moudle-A module
jacocoTestCoverageVerification {
violationRules {
    rule {
        limit {
            minimum = 0.5
        }
    }
}

您好,Iante,谢谢您的回复,但我们的项目存在一年以上,如果将报告转移到一个单独的项目,它将需要做很多工作,到目前为止是不可行的。那么。。。这也适用于其中一个java项目。看不出这将需要“许多工作”来分离到它自己的项目中。当然这只是几行Gradle配置?还有可能是CI?Hi,Iance中的一些配置,因为我们使用Sprint-to-dev(作为Sprint的两周),而且如果将它们移动到一个单独的项目中,我们需要创建一个新项目并将其放入git存储库,修改jacoco代码覆盖率报告,修改CICD-jenkins作业、gradlew配置,以及一些集成测试和e2e测试,因此,在短时间内这不是一件容易的工作。我的意思是在同一个多模块构建中创建一个单独的项目(模块),正如您可以从我的gradle脚本示例中看到的那样。同样的git存储库,同样的buildYes,我找到了另一个解决方案,那就是在每个模块中编写限制规则,比如对于模块A,它的代码覆盖率是50%,所以在模块A的build.gradle文件中,规则如下:
JacoTestCoverageVerification{violationRules{rule{limit{minimum=0.5}}
Yep,好主意!您可以将其放在
subprojects{}
部分下,以应用于所有模块
def javaProjects = [':a', ':b', ':c']
javaProjects.each {
   project(it) {
      apply plugin: 'java' 
      apply plugin: 'jacoco' 
   } 
} 
project(':report') {
    FileCollection execData = files(javaProjects.collect { project(it).tasks.withType(Test).jacoco.destinationFile }) 
    FileCollection sourceDirs = files(javaProjects.collect { project(it).sourceSets.main.java.srcDirs }) 
    FileCollection classDirs = files(javaProjects.collect { project(it).sourceSets.main.java.output.classesDirs }) 
    def testTasks = javaProjects.collect { project(it).tasks.withType(Test)} 


   task jacocoMerge(type: JacocoMerge) {
      dependsOn testTasks
      executionData execData
      jacocoClasspath = classDirs
   } 
   task coverageVerification(type: JacocoCoverageVerification) {
      dependsOn jacocoMerge
      executionData jacocoMerge.destinationFile
      sourceDirectories srcDirs
      classDirectories classDirs
      violationRules.rule.limit.minimum = 0.38
   } 
   task jacocoReport(type: JacocoReport) {
      dependsOn jacocoMerge
      executionData jacocoMerge.destinationFile
      sourceDirectories srcDirs
      classDirectories classDirs
   }
} 
// for moudle-A module
jacocoTestCoverageVerification {
violationRules {
    rule {
        limit {
            minimum = 0.5
        }
    }
}