【问题标题】:Exclude databinding package from jacoco report从 jacoco 报告中排除数据绑定包
【发布时间】:2023-03-28 07:49:01
【问题描述】:

在我的 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/**/*.*']
                )
            }
        }
    }

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

【问题讨论】:

    标签: android gradle android-gradle-plugin jacoco


    【解决方案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 子目录中的任何文件,而不是目录本身中的文件

      【讨论】:

        猜你喜欢
        • 2018-09-22
        • 2013-01-18
        • 1970-01-01
        • 2015-01-17
        • 1970-01-01
        • 2015-03-04
        • 2013-06-27
        • 2015-08-24
        • 2016-02-25
        相关资源
        最近更新 更多