从 jacoco 报告中排除 databinding 包

3

在我的Jacoco报告中,我看到了一些奇怪的databinding包。

enter image description here

我尝试将以下内容添加到我的build.gradle文件中以排除它:

    testOptions {
        unitTests.all {
            jacoco {
                includeNoLocationClasses = true
                afterEvaluate {
                    classDirectories.setFrom(files(classDirectories.files.collect {
                        fileTree(dir: it, exclude: '**/*databinding/**/*.*')
                    }))
                }
                classDirectories = fileTree(
                        dir: "${project.buildDir}",
                        excludes: ['**/*databinding/**/*.*']
                )
            }
        }
    }

似乎它们无效。 有没有一种方法可以从我的报告中删除这个包/文件夹?
2个回答

0

你可以定义更广泛的文件过滤器

def fileFilter = [
                        // data binding
                        'android/databinding/**/*.class',
                        '**/android/databinding/*Binding.class',
                        '**/android/databinding/*',
                        '**/androidx/databinding/*',
                        '**/BR.*',
                        // android
                        '**/R.class',
                        '**/R$*.class',
                        '**/BuildConfig.*',
                        '**/Manifest*.*',
                        '**/*Test*.*',
                        'android/**/*.*',
                        // kotlin
                        '**/*MapperImpl*.*',
                        '**/*$ViewInjector*.*',
                        '**/*$ViewBinder*.*',
                        '**/BuildConfig.*',
                        '**/*Component*.*',
                        '**/*BR*.*',
                        '**/Manifest*.*',
                        '**/*$Lambda$*.*',
                        '**/*Companion*.*',
                        '**/*Module*.*',
                        '**/*Dagger*.*',
                        '**/*Hilt*.*',
                        '**/*MembersInjector*.*',
                        '**/*_MembersInjector.class',
                        '**/*_Factory*.*',
                        '**/*_Provide*Factory*.*',
                        '**/*Extensions*.*',
                        // sealed and data classes
                        '**/*$Result.*',
                        '**/*$Result$*.*',
                        // adapters generated by moshi
                        '**/*JsonAdapter.*',
                ]

def javaTree = fileTree(dir: "${project.buildDir}/intermediates/javac/$sourceName/classes", excludes: fileFilter)
def kotlinTree = fileTree(dir: "${project.buildDir}/tmp/kotlin-classes/$sourceName", excludes: fileFilter)
classDirectories.from = files([javaTree], [kotlinTree])

参考 - https://medium.com/nerd-for-tech/setup-jacoco-code-coverage-with-your-multimodule-android-app-kotlin-a0f82573a1


1
根据我的经验,这些过滤器根本没有起到作用。我甚至尝试了 '**/*',但是所有的东西仍然出现在报告中。 - SMBiggs

0

你的排除语句几乎正确,这是正确的:

'**/databinding/*'

这是因为数据绑定构建文件位于

app\build\intermediates\javac\[buildVariantName]\classes\[your\package\name]\databinding

我现在无法找到文档,但我认为你的排除语句databinding/**/*.*指向的是与databinding子目录中的任何文件,而不是目录本身中的文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接