我有一个maven多模块项目,我使用jacoco-maven做代码覆盖报告。有些类不应该被报告,因为它们是Spring配置,我对它们不感兴趣。
我已经声明了maven-jacoco插件如下:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.2.201409121644</version>
<configuration>
<outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory>
<exclude>some.package.*</exclude>
<exclude>**/*Config.*</exclude>
<exclude>**/*Dev.*</exclude>
<exclude>some/package/SomeClass.java</exclude>
</configuration>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
<execution>
<id>post-unit-test</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
问题是当我执行mvn clean verify
的时候jacoco仍然会报告那些应该被排除的类,就像我的xml配置指出的那样,我该如何正确地配置它呢?
9条答案
按热度按时间kgsdhlau1#
您的XML稍有错误,您需要在excludes父字段中添加任何类排除,因此根据Jacoco docs,您的上述配置应如下所示
使用标准通配符语法,exclude字段的值应该是已编译类相对于目录目标/classes/的类路径(而不是包名称
您也可以使用下列方式排除套件及其所有子系/子套件:
这将排除
some.package
中的所有类以及所有子类。例如,some.package.child
也不会包含在报告中。我已经测试过了,我的报告目标报告了使用上述方法的减少数量的类。
如果您随后将此报告推送到Sonar中,则需要通知Sonar在显示中排除这些类,这可以在Sonar设置中完成
设置〉常规设置〉排除〉代码覆盖率
Sonar Docs对此进行了更多解释
在上面运行命令
将显示已排除的类
无排除项
包含排除项
希望这对你有帮助
pieyvz9o2#
虽然Andrew已经详细回答了这个问题,但我给出了如何在pom中排除它的代码
适用于Springboot应用程序
x0fgdtte3#
另一种解决方案:
请注意,我们在配置中使用了
"<element>PACKAGE</element>"
,这有助于我们在包级别排除。hgqdbh6s4#
您可以在声纳属性中配置覆盖范围排除,在jacoco插件的配置之外:
并记住从插件中删除排除设置
2nc8po8w5#
使用声纳,覆盖范围,排除属性.
这将从保险额计算中排除这些类。
hiz5n14c6#
SonarQube文档中的一些示例:
xqk2d5yq7#
https://github.com/jacoco/jacoco/issues/34
下面是我们对类的不同表示法:
代理参数、Ant任务和Maven准备代理目标
这些规范允许使用通配符 * 和?,其中 * 通配符可以使用任意数量的字符,甚至可以使用多个嵌套文件夹。
Maven报告目标
这些规范允许Ant Filespec使用通配符 *、**和?,其中 * 通配符仅表示单个路径元素的一部分。
vngu2lb88#
Sping Boot 2.5.3和Jacoco 0.8.4的出色表现^_^
xuo3flqw9#
下面是
pom.xml
文件中的工作示例。