plugins { id 'java' id 'jacoco' } // Do not generate reports for individual projects tasks.jacocoTestReport.configure { enabled = false } // Share sources folder with other projects for aggregated JaCoCo reports configurations.create('transitiveSourcesElements') { visible = false canBeResolved = false canBeConsumed = true extendsFrom(configurations.implementation) attributes { attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage, Usage.JAVA_RUNTIME)) attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category, Category.DOCUMENTATION)) attribute(DocsType.DOCS_TYPE_ATTRIBUTE, objects.named(DocsType, 'source-folders')) } sourceSets.main.java.srcDirs.forEach { outgoing.artifact(it) } } // Share the coverage data to be aggregated for the whole product configurations.create('coverageDataElements') { visible = false canBeResolved = false canBeConsumed = true extendsFrom(configurations.implementation) attributes { attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage, Usage.JAVA_RUNTIME)) attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category, Category.DOCUMENTATION)) attribute(DocsType.DOCS_TYPE_ATTRIBUTE, objects.named(DocsType, 'jacoco-coverage-data')) } outgoing.artifact(tasks.named('test').map { task -> task.extensions.getByType(JacocoTaskExtension).destinationFile }) }