当前位置: 首页 > 知识库问答 >
问题:

排除不适用于Jacoco Gradle插件

尉迟远
2023-03-14

我正在为我的项目设置Jacoco Gradle插件。该插件执行良好,并生成覆盖报告,但它不排除我将排除的包。

我想包含的类在com/xxx/ws/hn/**中,我想排除的类在com/xxx/ws/企业/**中。

这是我的Gradle脚本:

apply plugin: "jacoco"

jacoco {
    toolVersion = "0.6.2.201302030002"
    reportsDir = file("$buildDir/reports/jacoco")
}

test {
    jacoco{
        excludes = ["com/xx/ws/enterprise/**/*"]
        includes = ["com/xxx/ws/hn/**/*"]
        append = false
    }
}

jacocoTestReport {
    dependsOn test
    description = "Generate Jacoco coverage reports after running tests."
    executionData = files('build/jacoco/test.exec')
    reports {
        xml.enabled true
        html.enabled true
    }
}

我有什么遗漏吗?我尝试过各种排除模式,包括“.”包的分隔符,而不是“/”,但似乎没有任何效果。任何帮助都将不胜感激。

共有2个答案

陈法
2023-03-14

为了巩固(并验证)Joachim的答案,我看到了这篇SO文章,发现用单个通配符指定规范类名、类路径样式(用斜杠,而不是句点)实际上效果很好。例如,以下是在我的构建中工作的排除列表,定义为单独的gradle文件中的列表:

def testExcl = [
    'android/*',
    'com/android/*',
    'com/nativelibs4java/*',
    'com/ochafik/*',
    'com/fasterxml/*',
    'com/esotericsoftware/*',
    'com/google/*',
    'com/lmax/*',
    'com/sun/*',
    'jdk/*',
    'mockit/*',
    'org/apache/*',
    'org/bridj/*',
    'org/gradle/*',
    'org/hamcrest/*',
    'org/junit/*',
    'org/slf4j/*',
    'sun/*',
    'worker/*',
    '*Test',
    '*TestIntegration',
    '*AllTests',
    '*Suite'
]

我尝试了10到12种格式化类名的方法,这是唯一有效的方法。我不知道为什么像这样简单/基本的东西在Gradle的上下文中如此难以找到明确的答案(即在JaCoCo的官方文档之外,那里没有关于Gradle集成的文档,但是有Ant和Maven集成文档)。

如果其他人试图让JaCoCo排除类,希望这会有所帮助。

更新:这在Gradle7中发生了变化(我从5.6.1改为7.1.1,所以不确定Gradle6),不再工作。对于Gradle 7,您需要替换为。;以下是我的最新排除条款:

def testExcl = [
    'android.*',
    'com.android.*',
    'com.nativelibs4java.*',
    'com.ochafik.*',
    'com.fasterxml.*',
    'com.esotericsoftware.*',
    'com.google.*',
    'com.lmax.*',
    'com.sun.*',
    'jdk.*',
    'mockit.*',
    'org.apache.*',
    'org.bridj.*',
    'org.gcpud.common.*',
    'org.gcpud.testutil.*',
    'org.gradle.*',
    'org.hamcrest.*',
    'org.junit.*',
    'org.slf4j.*',
    'sun.*',
    'worker.*',
    '*Test',
    '*Test$*',
    '*TestIntegration',
    '*AllTests',
    '*Suite'
]

另请参见以下SO帖子,了解从报告中排除类别的其他方法(从报告中排除,而不是覆盖范围本身):

使用Gradle过滤JaCoCo覆盖报告

荀豪
2023-03-14

我还没有验证这一点,但是当我阅读JaCoCo留档时,它指出通配符可以使用,但是所有的例子只有一个*,而不是像你的例子所示的两个。

http://www.eclemma.org/jacoco/trunk/doc/agent.html

 类似资料:
  • 当我运行mvn pmd:check并将JAVA_HOME设置为jdk 1.8时,这运行平稳。当我将jdk切换到1.7时,我得到以下异常。PMD支持1.7,所以不确定为什么我得到这个错误。 原因:org.apache.maven.plugin.PluginContainerException:执行org.apache.maven.plugins时遇到API不兼容:maven-pmd-plugin:

  • 在我的项目中添加kongchen swagger-maven-plugin(版本3.1.0)后,log4j停止工作。我们正在使用Spring(版本4.1.5)和slf4j(版本1.7.5)如果我在pom.xml中注释掉kongchen插件依赖,log4j再次开始工作。你能帮忙吗?谢谢! 这是我的pom的内容。xml `http://maven.apache.org/maven-v4_0_0.xsd

  • 我目前正在使用带有Spring Data commons 1.9.1和Spring JPA 1.7.1的JpaSort。我需要使用QueryDSL,因为JPA不允许为空值定义排序。 这是我的存储库 我在我的控制器中这样做: 这就是我对JPA的看法: 这是我为QueryDSL更改的内容: 然而,似乎什么都没有得到整理。我已经启用了调试日志记录,我看到了这一点: 如果我将其更改为: 然后,按我的“数据

  • 一些stackoverflow帖子暗示我的类路径中有spring-asm的冲突版本。通过gradle依赖分析,我看到我没有spring-asm的多个版本,但我有spring-core的多个版本(版本3.1.4和5.0.2) 我试图排除3.1.4版本,但无法使其工作。我试图在依赖级别和配置级别都排除它。 即使有了上述更改,我仍然在依赖分析输出中发现Spring-Core:3.1.4.Release。

  • 问题内容: 我试图使用 AngularJS 提供的和函数显示/隐藏一些HTML 。 **** 根据文档,这些功能的各自用法如下: ngHide – {表达式}-如果表达式为true,则分别显示或隐藏该元素。ngShow – {表达式}-如果表达式为真,则分别显示或隐藏该元素。 这适用于以下用例: 但是,如果我们使用对象中的参数作为表达式,则和被赋予正确的/ 值,但这些值不会被视为布尔值,因此始终返

  • 我在一个网站上工作,遇到了一个问题,点击我的“删除”链接会出现一个错误页面。在localhost上运行良好-无法理解为什么在Heroku站点上会有所不同。 有人知道这是怎么回事吗? 我的“图片”控制器: 我的图片/新视图: 以下是我尝试删除图片时的heroku日志(从导航到新图片页面开始(同一视图中的新建和编辑功能): 2015-11-15T16:13:49.189857 00:00 heroku