Gradle Jacoco - 覆盖率报告包括配置中排除的类别

StK*_*ler 9 gradle jacoco

我在项目中添加了一组没有测试的源代码,我不希望它们破坏我的测试覆盖率统计信息.我在下一个方面配置了Jacoco:

test {
    jacoco{
        excludes = ['org/bla/**']
        includes = ['com/bla/**']
        append = false
    }
}

jacocoTestReport {
    dependsOn test
    description = "Generate Jacoco coverage reports after running tests."
    reports {
        xml.enabled true
        html.enabled true
    }
    classDirectories = fileTree(dir: 'build/classes/main', include: 'com/bla/**')
    sourceDirectories = fileTree(dir: 'scr/main/java', include: 'com/bla/**')
}
Run Code Online (Sandbox Code Playgroud)

但无论如何,在生成报告时,Jacoco还包括来自org.bla的

有人能帮我吗 ?

编辑

经过一些调试后,似乎所有默认输出都添加到org.gradle.testing.jacoco.tasks.JacocoReport#classDirectories私有方法中org.gradle.testing.jacoco.plugins.JacocoPlugin#addDefaultReportTasks

使用此类代码时可见:

jacocoTestReport {
    classDirectories = files('build/classes/main/com/bla')
    println("-----------------------------------------------------------")
    getAllClassDirs().each { File file ->
        println(file.absolutePath)
    }
    println("-----------------------------------------------------------")
    getAdditionalClassDirs().each{ File file ->
        println(file.absolutePath)
    }
}

jacocoTestReport << {
    println("-----------------------------------------------------------")
    getAllClassDirs().each { File file ->
        println(file.absolutePath)
    }
    println("-----------------------------------------------------------")
    getAdditionalClassDirs().each{ File file ->
        println(file.absolutePath)
    }
}

Output
-----------------------------------------------------------
<path_here>\build\classes\main\com\bla
-----------------------------------------------------------
....more text here
-----------------------------------------------------------
<path_here>\build\classes\main\com\bla
<path_here>\build\classes\main
<path_here>\build\resources\main
-----------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

所以 - 问题是:是否有可能覆盖某种org.gradle.testing.jacoco.plugins.JacocoPlugin#addDefaultReportTasks方法,或完全覆盖org.gradle.testing.jacoco.plugins.JacocoPlugin类?

StK*_*ler 10

好的,找到了一个解决方法:

jacocoTestReport.doFirst{
    classDirectories = files('build/classes/main/com/bla')
}
Run Code Online (Sandbox Code Playgroud)

这将覆盖由JacocoPlugin类设置的classDirectories.