首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用梯度过滤JaCoCo覆盖报告

用梯度过滤JaCoCo覆盖报告
EN

Stack Overflow用户
提问于 2015-04-27 05:25:13
回答 16查看 136.2K关注 0票数 178

问题:

我有一个带有贾科科的项目,我希望能够过滤某些类和/或包。

相关文件:

我阅读了下列文件:

官方 贾科科 站点: http://www.eclemma.org/jacoco/index.html

gradle 官方 贾科科 文档

Github 贾科科 ,致力于报道: https://github.com/jacoco/jacoco/wiki/FilteringOptions https://github.com/jacoco/jacoco/issues/14

相关的StackOverflow链接:

JaCoCo &分级过滤选项 (无答案)

使用Sonarrunner和Gradle从Jacoco报告中排除包 (不使用声纳)

JaCoCo -从报表中排除JSP (它似乎适用于maven,我使用的是gradle)

Maven Jacoco配置-将类/包从报告中排除在外 (它似乎适用于maven,我使用的是gradle)

JaCoCo级插件排除 (无法让它工作)

Gradle Jacoco覆盖率报告包括配置中排除的类。 (似乎非常接近,它使用了doFirst,对我不起作用)

我尝试过的例子:

代码语言:javascript
运行
复制
apply plugin: 'java'
apply plugin: 'jacoco'

buildscript {
    repositories {
        mavenCentral()
        jcenter()
    }
}

repositories {
    jcenter()
}

jacocoTestReport {
    reports {
        xml {
            enabled true // coveralls plugin depends on xml format report
        }

        html {
            enabled true
        }
    }

    test {
        jacoco {
            destinationFile = file("$buildDir/jacoco/jacocoTest.exec")
            classDumpFile = file("$buildDir/jacoco/classpathdumps")
            excludes = ["projecteuler/**"] // <-- does not work
            // excludes = ["projecteuler"]
        }
    }
}

问题:

如何在生成 贾科科 覆盖率报告时排除某些包和类?

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2015-04-27 05:25:13

多亏了,Yannick Welsch

在搜索了Google、阅读了Gradle文档并浏览了一些旧的StackOverflow帖子之后,我在官方的gradle论坛上找到了这个答案!

代码语言:javascript
运行
复制
jacocoTestReport {
    afterEvaluate {
        classDirectories.setFrom(files(classDirectories.files.collect {
            fileTree(dir: it, exclude: 'com/blah/**')
        }))
    }
}

资料来源: https://issues.gradle.org/browse/GRADLE-2955

对于较早的分级版本,< 5.x可能需要使用classDirectories = files(classDirectories.files.collect {而不是classDirectories.setFrom

我的build.gradle /Groovy项目的解决方案:

代码语言:javascript
运行
复制
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/**'])
        })
    }
}

如您所见,为了过滤几个包,我成功地向exclude:添加了更多内容。

资料来源: https://github.com/jaredsburrows/CS-Interview-Questions/blob/master/build.gradle

其他项目(如Android)的自定义任务:

代码语言:javascript
运行
复制
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/**'])
        })
    }
}

资料来源: https://github.com/jaredsburrows/android-gradle-java-app-template/blob/master/gradle/quality.gradle#L59

票数 159
EN

Stack Overflow用户

发布于 2019-01-16 09:31:49

对于Gradle版本5.x,classDirectories = files(...)给出了一个弃用警告,并且从Gradle 6.0开始根本不起作用--这是排除类的不受欢迎的方式:

代码语言:javascript
运行
复制
jacocoTestReport {
    afterEvaluate {
        classDirectories.setFrom(files(classDirectories.files.collect {
            fileTree(dir: it, exclude: 'com/exclude/**')
        }))
    }
}
票数 96
EN

Stack Overflow用户

发布于 2016-06-21 10:37:31

对我来说,和他一起工作很好

代码语言:javascript
运行
复制
test {
  jacoco {
    excludes += ['codeeval/**',
                 'crackingthecode/part3knowledgebased/**',
                 '**/Chapter7ObjectOrientedDesign**',
                 '**/Chapter11Testing**',
                 '**/Chapter12SystemDesignAndMemoryLimits**',
                 'projecteuler/**']
  }
}

正如plugin.html#N16E62文档中所指出的,并且在最初被问到的情况下,答案是:

所以如果你问我:这不是一个

代码语言:javascript
运行
复制
excludes = ["projecteuler/**"]

代码语言:javascript
运行
复制
excludes += ["projecteuler/**"]

代码语言:javascript
运行
复制
excludes = ["**/projecteuler/**"]

若要排除包*.projecteuler.*

test {}在项目级别上,而不是嵌套在jacocoTestReport中。

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29887805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档