apply plugin: 'jacoco' def testedProjects() { subprojects.findAll { subproject -> subproject.plugins.hasPlugin('java') || subproject.plugins.hasPlugin('kotlin') } } gradle.projectsEvaluated { configure(testedProjects()) { apply plugin: 'jacoco' jacoco { toolVersion = '0.8.1' } jacocoTestReport { sourceDirectories = files(sourceSets.main.allSource.srcDirs) classDirectories = files(sourceSets.main.output) } test { reports { junitXml.enabled = true html.enabled = false } jacoco { append = false destinationFile = file("$buildDir/jacoco/jacocoTest.exec") classDumpDir = file("$buildDir/jacoco/classpathdumps") } } } task jacocoTestReport(type: JacocoReport) { def tests = [] def sourceDirs = files() def classDirs = files() def execData = files() reports { xml.enabled = true html.enabled = false } testedProjects().each { subproject -> sourceDirs += files(subproject.sourceSets.main.allSource.srcDirs) classDirs += files(subproject.sourceSets.main.output) execData += files(subproject.tasks.jacocoTestReport.executionData.findAll { it.exists() }) tests += subproject.tasks.test } dependsOn tests sourceDirectories = sourceDirs classDirectories = classDirs executionData = execData } sonarqube { properties { property "sonar.organization", "apollo-rsps" property "sonar.projectKey", "apollo:org.apollo" property "sonar.projectName", "Apollo RSPS" property "sonar.kotlin.file.suffixes", ".kt,.kts" } } project.tasks["sonarqube"].dependsOn(jacocoTestReport) }