从 jacoco 报告中排除数据绑定包

Posted

技术标签:

【中文标题】从 jacoco 报告中排除数据绑定包【英文标题】:Exclude databinding package from jacoco report 【发布时间】:2021-12-05 02:06:16 【问题描述】:

在我的 jacoco 报告中,我看到了一些奇怪的数据绑定包。

我尝试将以下内容添加到我的 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/**/*.*']
                )
            
        
    

它们似乎不起作用。有没有办法从我的报告中删除这个包/文件夹?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

您的排除几乎是正确的,这是正确的:

'**/数据绑定/*'

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

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

我现在似乎找不到文档,但我认为您的排除 databinding/**/*.* 指向 databinding 子目录中的任何文件,而不是目录本身中的文件

【讨论】:

以上是关于从 jacoco 报告中排除数据绑定包的主要内容,如果未能解决你的问题,请参考以下文章

从 DataGrip 中的“数据库、表、过程”搜索中排除数据库

使用 Sonarrunner 和 Gradle 从 Jacoco 报告中排除包

Jacoco配置-从报告中排除类/程序包

Jacoco配置-从报告中排除类/程序包

Jacoco配置-从报告中排除类/程序包

Jacoco配置-从报告中排除类/程序包