【发布时间】:2020-04-14 18:34:41
【问题描述】:
我一直试图从 jacoco 生成的覆盖率报告中排除某些类和/或包。我以前和 jacoco 合作过,但它不是一个多模块项目,所以我尝试翻译配置并将其导出到模块,但到目前为止,报告完全忽略了我的排除路径。
我尝试了很多解决方案,例如:
- Filter JaCoCo coverage reports with Gradle
- https://gist.github.com/aalmiray/e6f54aa4b3803be0bcac
- Unable to Exclude generated classes from kotlin jacoco test coverage
- https://github.com/th-deng/jacoco-on-gradle-sample/blob/master/build.gradle.kts
- https://github.com/gradle/kotlin-dsl-samples/issues/1176#issuecomment-435816812
我不知道我做错了什么,我对 gradle 不是很了解,而且我发现的几乎每个文档/示例都使用单个模块项目。 我创建了一个小项目并推送到gitlab,以便您更好地查看。
期望的结果是能够直接向模块添加更多路径或类。
非常感谢您能提供的任何帮助。
代码 sn-ps:
Root build.gradle.kts
plugins {
kotlin("jvm") version "1.3.71"
jacoco
}
repositories {
mavenCentral()
}
defaultTasks("clean", "build", "test")
allprojects {
apply(plugin = "org.jetbrains.kotlin.jvm")
apply(plugin = "jacoco")
group = "org.example"
version = "1.0-SNAPSHOT"
repositories {
mavenCentral()
}
jacoco {
toolVersion = "0.8.5"
}
dependencies {
implementation(kotlin("stdlib-jdk8"))
testImplementation("org.testng:testng:6.14.3")
}
configure<JavaPluginConvention> {
sourceCompatibility = JavaVersion.VERSION_1_8
}
tasks.withType(org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompile::class) {
kotlinOptions {
jvmTarget = "1.8"
}
}
tasks.test {
useTestNG()
finalizedBy("jacocoTestReport")
}
}
tasks.jacocoTestReport {
val sourceDirs = sourceSets.main.get().allSource.srcDirs
additionalSourceDirs.setFrom(sourceDirs)
sourceDirectories.setFrom(sourceDirs)
classDirectories.setFrom(sourceSets.main.get().output)
reports {
html.isEnabled = true
xml.isEnabled = false
csv.isEnabled = false
}
}
tasks.register<JacocoReport>("jacocoRootReport") {
val sourceDirs = subprojects.map { project -> project.sourceSets.main.get().allSource.srcDirs }
dependsOn(subprojects.map { project -> project.tasks.test })
sourceDirectories.setFrom(sourceDirs)
additionalSourceDirs.setFrom(sourceDirs)
classDirectories.setFrom(subprojects.map { project -> project.sourceSets.main.get().output })
executionData.setFrom(subprojects.map { project -> project.tasks.jacocoTestReport.get().executionData })
reports {
html.isEnabled = true
xml.isEnabled = false
csv.isEnabled = false
}
}
tasks.test {
finalizedBy("jacocoRootReport")
}
Module build.gradle.kts
dependencies {
implementation(project(":api"))
}
tasks {
getByName<JacocoReport>("jacocoTestReport") {
afterEvaluate {
classDirectories.setFrom(files(classDirectories.files.map {
fileTree(it) {
exclude("org/example/AppClass.class")
}
}))
}
}
}
另外,任何关于其他任何事情的反馈都非常感谢,我正在努力学习/改进并可以使用一些:)。
[Edit #1] 刚刚将singlemodule branch 添加到按预期工作的同一仓库中,但在单模块模式下。
[Edit #2] 注意我使用jacoco: 0.8.5 gradle: 6.1 和Kotlin DSL (build.gradle.kts) 上的配置文件
【问题讨论】:
标签: android kotlin gradle jacoco multi-module