Hi, I'm adding JaCoCo to a project and I'm using a...
# code-coverage
l
Hi, I'm adding JaCoCo to a project and I'm using a previous config that I was using time ago. The task generates the Coverage report but totally ignores the fileFilter. There is something I'm missing? Thanks
Copy code
task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'createDebugUnitTestCoverageReport']) {
    reports {
        xml.enabled true
        html.enabled true

    }
    // TODO: It's ignoring the file filter?
    def fileFilter = [
            // ...
            **/theme/**
    ]
    def debugTree = fileTree(dir: "${buildDir}/intermediates/classes/debug", excludes: fileFilter)
    def mainSrc = "${project.projectDir}/src/main/java"
    println("Main SRC is:" + mainSrc)
    sourceDirectories.setFrom(files([mainSrc]))
    classDirectories.setFrom(files([debugTree]))
    executionData.setFrom(fileTree(dir: "$buildDir", includes: [
            "jacoco/testDebugUnitTest.exec",
            "outputs/code-coverage/connected/*<http://coverage.ec|coverage.ec>"
    ]))
}
1
If someone running through this, I solved it by changing execution data script path. To simplify it, I created this script in the main root, and applied to each build.gradle file.
Copy code
apply plugin: 'jacoco'

jacoco {
    toolVersion '0.8.7'
}

tasks.withType(Test) {
    jacoco.includeNoLocationClasses = true
}

configurations.all{
    resolutionStrategy {
        eachDependency { details ->
            if ('org.jacoco' == details.requested.group) {
                details.useVersion "0.8.7"
            }
        }
    }
}

project.afterEvaluate {

    tasks.create(name: "debugCoverage", type: JacocoReport, dependsOn: ['testDebugUnitTest', 'createDebugUnitTestCoverageReport']) {

        group = "Reporting"
        description = "Generate Jacoco coverage reports for the debug build."

        reports {
            html.enabled = true
            xml.enabled = true
        }

        def excludes = [
                ...
        ]

        def jClasses = "${project.buildDir}/intermediates/javac/debug/classes"
        def kClasses = "${project.buildDir}/tmp/kotlin-classes/debug"
        def javaClasses = fileTree(dir: jClasses, excludes: excludes)

        def kotlinClasses = fileTree(dir: kClasses, excludes: excludes)

        classDirectories.from = files([javaClasses, kotlinClasses])
        def sourceDirs = ["${project.projectDir}/src/main/java", "${project.projectDir}/src/main/kotlin",
                          "${project.projectDir}/src/debug/java", "${project.projectDir}/src/debug/kotlin"]

        sourceDirectories.from = files(sourceDirs)
        println("Running at : ${project.buildDir}")
        executionData.from = files(["${project.buildDir}/outputs/unit_test_code_coverage/debugUnitTest/testDebugUnitTest.exec"])
    }
}