apply plugin: "jacoco" jacoco { toolVersion = "0.8.2" } jacocoTestReport { dependsOn test reports { xml.enabled true csv.enabled false html.destination file("${buildDir}/reports/jacoco/") } } if (project.parent.hasProperty("excludedClassesConverage")) { project.ext.excludedClassesConverage = parent.excludedClassesConverage } else { project.ext.excludedClassesConverage = [] } if (project.parent.hasProperty("excludedClassesBranchConverage")) { project.ext.excludedClassesBranchConverage = parent.excludedClassesBranchConverage } else { project.ext.excludedClassesBranchConverage = [] } if (project.parent.hasProperty("excludedClassesInstructionConverage")) { project.ext.excludedClassesInstructionConverage = parent.excludedClassesInstructionConverage } else { project.ext.excludedClassesInstructionConverage = [] } // defaults can be overridden per project: project.ext.minimumBranchCoverage = 0.9 project.ext.minimumInstructionCoverage = 0.9 afterEvaluate { test { jacoco { // Make sure that excluded classes do not get jacoc instrumentation applied since it may confuse apm agent in some cases excludes = project.excludedClassesConverage } } jacocoTestCoverageVerification { violationRules { rule { element = 'CLASS' excludes = project.excludedClassesBranchConverage + project.excludedClassesConverage limit { counter = 'BRANCH' minimum = project.minimumBranchCoverage } } rule { element = 'CLASS' excludes = project.excludedClassesInstructionConverage + project.excludedClassesConverage limit { counter = 'INSTRUCTION' minimum = project.minimumInstructionCoverage } } } } jacocoTestCoverageVerification.dependsOn jacocoTestReport check.dependsOn jacocoTestCoverageVerification }