我正在将Gradle 4多项目安装程序升级到Gradle6。我在这里按照说明进行操作:
https://stackoverflow.com/a/56181389
并且我已经将jacoco版本更改为0.8.5
。目前唯一的问题是,人类可读的覆盖率报告似乎丢失了旧版本下显示的大多数覆盖率数据。覆盖率报告似乎仅反射(reflect)了最近(最近测试)的项目。过去在Gradle 4下可以正常工作。我正在使用Java 8。
我使用--debug
运行gradle构建,并且我注意到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
最佳答案
以下:
jacoco {
destinationFile = file("$rootProject.buildDir/jacoco/test.exec")
}
将Jacoco配置为始终使用相同的输出文件。
因此,问题很可能是最新的Gradle版本可用于分离冲突输出。
我建议查看有关如何在多项目中设置Jacoco的recently published sample,而不是尝试依赖冲突的输出。
关于gradle - jacocoRootReport仅显示多项目gradle构建的最后一个项目的覆盖范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61237936/