Reputation: 1
In android, we using Jacoco plugin for generating code coverage. Its generating the code coverage but also including activities, fragments, databinding etc classes. How to exclude classes and folders?
Sharing the code for task we have in build.gradle(app). Commented lines are the code we tried and not working.
/*tasks.withType(Test) { test ->
JacocoTaskExtension jacocoTaskExtension = getExtensions().getByType(JacocoTaskExtension.class);
List<String> excludes = new ArrayList<>()
excludes.add("jdk.internal.*")
excludes.add("/com.example.abc/data/**")
excludes.add("/com.example.abc/models/theme/**")jacocoTaskExtension
jacocoTaskExtension.setIncludes(['com.example.abc/ui/activities/**'])
jacocoTaskExtension.setExcludes(excludes);
}*/
task codeCoverageReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'createDebugCoverageReport']) {
group = "Reporting"
description = "Generate Jacoco coverage reports after running tests."
reports {
xml.enabled(false)
html.enabled(true)
html.outputLocation = layout.buildDirectory.dir("jacocoHtml")
}
//def classDirectoriesTree = fileTree("${project.buildDir}/javac/debug") {
//def classDirectoriesTree = fileTree("${project.buildDir}/javac/debugUnitTest") {
def classDirectoriesTree = fileTree("${project.buildDir}/tmp/testDebugUnitTest") {
exclude(androidExclusion)
}
// def classDirectoriesTree = fileTree("${project.buildDir}/javac/debug")
// .matching {
// exclude '**/com.example.abc/data/**'
// exclude '**/com.example.abc/models/theme/**'
// }
def sourceDirectoriesTree = fileTree("${project.buildDir}/src/main/java")
// def sourceDirectoriesTree = fileTree("${project.buildDir}/src/main/java")
// .matching {
// exclude '**/com.example.abc/data/**'
// exclude '**/com.example.abc/models/theme/**'
// }
def executionDataTree = fileTree("${project.buildDir}") {
include("jacoco/testDebugUnitTest.exec")
}
sourceDirectories.setFrom(sourceDirectoriesTree)
classDirectories.setFrom(classDirectoriesTree)
executionData.setFrom(executionDataTree)
// classDirectories.setFrom(
// files(classDirectories.getFiles().collect {
// fileTree(it) {
// exclude("**/config", "**/entity/**")
// }
// })
// )
//sourceDirectories.setFrom(files("${project.projectDir}/src/main/java/"), exclude: androidExclusion)
/*executionData.setFrom(fileTree(dir: "$buildDir", includes: [
"jacoco/testDebugUnitTest.exec",
"outputs/code-coverage/connected/*coverage.ec"
]))*/
// afterEvaluate {
// classDirectories.setFrom(files(classDirectories.files.collect {
// fileTree(dir: it, exclude: [
// '**/databinding/**',
// '**/models/**',
// ])})
// )
// }
afterEvaluate {
classDirectories.setFrom(files(classDirectories.files.collect {
fileTree(
dir: it,
exclude: ["com.example.abc/data/**",
"com.example.abc/models/theme/**"
]
)}
))
}
}
Note : single line comment added for the solution tried.
Upvotes: 0
Views: 71