Filter JaCoCo coverage reports with Gradle Filter JaCoCo coverage reports with Gradle java java

Filter JaCoCo coverage reports with Gradle


Thanks to, Yannick Welsch:

After searching Google, reading the Gradle docs and going through older StackOverflow posts, I found this answer on the Official forums!

jacocoTestReport {    afterEvaluate {        classDirectories.setFrom(files(classDirectories.files.collect {            fileTree(dir: it, exclude: 'com/blah/**')        }))    }}

Source: https://issues.gradle.org/browse/GRADLE-2955

For older gradle versions < 5.x may need to useclassDirectories = files(classDirectories.files.collect { instead of classDirectories.setFrom

Solution to my build.gradle for Java/Groovy projects:

apply plugin: 'java'apply plugin: 'jacoco'jacocoTestReport {    reports {        xml {            enabled true // coveralls plugin depends on xml format report        }        html {            enabled true        }    }    afterEvaluate {        classDirectories = files(classDirectories.files.collect {            fileTree(dir: it,                    exclude: ['codeeval/**',                              'crackingthecode/part3knowledgebased/**',                              '**/Chapter7ObjectOrientedDesign**',                              '**/Chapter11Testing**',                              '**/Chapter12SystemDesignAndMemoryLimits**',                              'projecteuler/**'])        })    }}

As you can see, I was successfully able to add more to exclude: in order to filter a few packages.

Source: https://github.com/jaredsburrows/CS-Interview-Questions/blob/master/build.gradle

Custom tasks for other projects such as Android:

apply plugin: 'jacoco'task jacocoReport(type: JacocoReport) {    reports {        xml {            enabled true // coveralls plugin depends on xml format report        }        html {            enabled true        }    }    afterEvaluate {        classDirectories = files(classDirectories.files.collect {            fileTree(dir: it,                    exclude: ['codeeval/**',                              'crackingthecode/part3knowledgebased/**',                              '**/Chapter7ObjectOrientedDesign**',                              '**/Chapter11Testing**',                              '**/Chapter12SystemDesignAndMemoryLimits**',                              'projecteuler/**'])        })    }}

Source: https://github.com/jaredsburrows/android-gradle-java-app-template/blob/master/gradle/quality.gradle#L59


For Gradle version 5.x, the classDirectories = files(...) gives a deprecation warning and does not work at all starting from Gradle 6.0This is the nondeprecated way of excluding classes:

jacocoTestReport {    afterEvaluate {        classDirectories.setFrom(files(classDirectories.files.collect {            fileTree(dir: it, exclude: 'com/exclude/**')        }))    }}


for me, it's fine working with

test {  jacoco {    excludes += ['codeeval/**',                 'crackingthecode/part3knowledgebased/**',                 '**/Chapter7ObjectOrientedDesign**',                 '**/Chapter11Testing**',                 '**/Chapter12SystemDesignAndMemoryLimits**',                 'projecteuler/**']  }}

as stated out in documentationhttps://docs.gradle.org/current/userguide/jacoco_plugin.html#N16E62 and initally askedso the answer is:

so if you ask me: it's not a question of

excludes = ["projecteuler/**"]

or

excludes += ["projecteuler/**"]

but

excludes = ["**/projecteuler/**"]

to exclude a package *.projecteuler.*

and test {} on project level, not nested in jacocoTestReport