Я обновляю свою многопроектную настройку Gradle 4 до Gradle 6. Я следовал инструкциям здесь:
{ ссылка }
и я поднял версию jacoco до 0.8.5
. В настоящее время единственная проблема заключается в том, что отчет о покрытии, читаемый человеком, по-видимому, пропускает большую часть данных о покрытии, которые он показывал в старой версии. Кажется, что отчет о покрытии отражает только последний (последний протестированный) проект. В Gradle 4 он работал нормально. Я использую Java 8.
Я запустил сборку gradle, используя --debug
, и заметил, что файл test.exec
удаляется несколько раз, по одному для каждого подпроект, который имеет тесты. Я думаю, что это проблема, но я не знаю, как предотвратить удаление этого файла.
2020-04-16T09:16:21.048-0600 [DEBUG] [org.gradle.internal.file.impl.DefaultDeleter] Deleting /Users/bishop/dev/aep/edge-profile-lookup-target/build/jacoco/test.exec
Может кто-нибудь, пожалуйста, помогите мне исправить это так, чтобы все покрытие (от каждого из тестов, которые работали против каждого из подпроектов) появляются в одном отчете о покрытии?
Вот части основного файла build.gradle
, которые кажутся актуальными:
buildscript {
ext {
jacocoVersion = '0.8.5'
...
}
...
}
allprojects {
...
apply plugin: 'jacoco'
...
}
subprojects {
tasks.withType(Test) {
// redirect all coverage data to one file
jacoco {
destinationFile = file("$rootProject.buildDir/jacoco/test.exec")
}
}
jacoco {
toolVersion = jacocoVersion
}
jacocoTestReport {
additionalSourceDirs.from = files(sourceSets.main.allSource.srcDirs)
sourceDirectories.from = files(sourceSets.main.allSource.srcDirs)
classDirectories.from = files(sourceSets.main.output.collect {
fileTree(dir: it, exclude: project.properties['BUILD_COVERAGE_EXCLUSIONS'].tokenize(','))
})
reports {
html.enabled = true
xml.enabled = true
csv.enabled = false
}
}
}
task jacocoRootReport(type: JacocoReport) {
dependsOn = subprojects.test
additionalSourceDirs.from = files(subprojects.sourceSets.main.allSource.srcDirs)
sourceDirectories.from = files(subprojects.sourceSets.main.allSource.srcDirs)
classDirectories.from = files(subprojects.jacocoTestReport.classDirectories)
executionData.from = files(subprojects.jacocoTestReport.executionData)
reports {
html.enabled = true
xml.enabled = true
csv.enabled = false
}
onlyIf = {
true
}
doFirst {
executionData.from = files(executionData.findAll {
it.exists()
})
}
}
...
apply plugin: 'jacoco'
configurations.create("jacoco")
configurations {
jacoco
}
dependencies {
jacocoAnt group: 'org.jacoco', name: 'org.jacoco.ant', version: jacocoVersion
jacocoAnt group: 'org.ow2.asm', name: 'asm', version: asmVersion
}
task copyRuntimeLibs(type: Copy) {
from configurations.jacoco
into "$rootProject.buildDir/libs"
}
build.dependsOn copyRuntimeLibs