排除在使用jacoco和gradle的多模块项目的研究范围内

问题描述 投票:0回答:1

我一直试图从jacoco生成的覆盖率报告中排除某些类和/或软件包。我以前曾与jacoco一起工作过,但它不是一个多模块项目,因此我尝试转换配置并将其导出到模块中,但是到目前为止,报告返回时完全忽略了我的排除路径。

我尝试了许多解决方案,例如:

我不知道我在做什么错,在gradle上我不是很了解,几乎我发现的每个文档/示例都使用单个模块项目。我创建了一个小项目,并将其推送到gitlab,这样您可以拥有更好的外观。

期望的结果是能够直接向模块添加更多路径或类。

非常感谢您能提供的任何帮助。


代码段:

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.1Kotlin DSL (build.gradle.kts)上的配置文件一起使用>

我一直在尝试从jacoco生成的覆盖率报告中排除某些分类和/或软件包。我以前与jacoco一起工作过,但它不是一个多模块项目,所以我尝试翻译...

kotlin gradle jacoco multi-module
1个回答
0
投票

前段时间,我还停留在与Sonarqube设置JaCoCo的过程中,并提出了this article,这可能会对您有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.