Maven Jacoco配置 - 从报告中排除类/包不起作用

res*_*a87 80 configuration maven jacoco jacoco-maven-plugin

我有一个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>
Run Code Online (Sandbox Code Playgroud)

问题是,当我执行mvn clean verifyjacoco时,仍会报告应该已被排除的类,因为我的xml配置指出了.如何正确配置?

And*_*Kew 142

您的XML略有错误,您需要在排除父字段中添加任何类排除项,因此根据Jacoco文档,您的上述配置应如下所示

<configuration>
    <excludes>
        <exclude>**/*Config.*</exclude>
        <exclude>**/*Dev.*</exclude>
    </excludes>
</configuration>
Run Code Online (Sandbox Code Playgroud)

排除字段的值应该是使用标准通配符语法相对于目标target/classes /的已编译类的类路径(而不是包名)

*   Match zero or more characters
**  Match zero or more directories
?   Match a single character
Run Code Online (Sandbox Code Playgroud)

您也可以通过这种方式排除包及其所有子包/子包:

<exclude>some/package/**/*</exclude>
Run Code Online (Sandbox Code Playgroud)

这将排除每个班级some.package以及任何孩子.例如,some.package.child也不会包括在报告中.

我已经测试过,我的报告目标报告使用上述方法减少了课程数量.

如果您正在将此报告推送到Sonar,那么您需要告诉Sonar在显示中排除这些类,这些类可以在Sonar设置中完成

设置>常规设置>排除>代码覆盖率

Sonar Docs解释了一下

在上面运行你的命令

mvn clean verify
Run Code Online (Sandbox Code Playgroud)

将显示已排除的类

没有例外

[INFO] --- jacoco-maven-plugin:0.7.4.201502262128:report (post-test) @ ** ---
[INFO] Analyzed bundle '**' with 37 classes
Run Code Online (Sandbox Code Playgroud)

有排除

[INFO] --- jacoco-maven-plugin:0.7.4.201502262128:report (post-test) @ ** ---
[INFO] Analyzed bundle '**' with 34 classes
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助

  • 如果我从jacoco中排除一个文件,它会显示在覆盖率报告中,覆盖率为0%.所以基本上我得到的结果比不排除更糟.这可以修复吗? (8认同)
  • 记得在文件名之间使用斜杠而不是点.此外,文件结尾是.class而不是.java. (4认同)
  • 我不得不将Jacoco插件从0.7.5升级到0.7.6,以便将排除考虑在内. (2认同)
  • 关于声纳的重要提示。很容易假设 JaCoCo 排除会自动传播到声纳(就像我所做的那样)。 (2认同)

vaq*_*han 11

虽然安德鲁已经回答了有关细节的问题,但我正在给代码如何在pom中排除它

           <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.7.9</version>
                <configuration>
                    <excludes>
                        <exclude>**/*com/test/vaquar/khan/HealthChecker.class</exclude>
                    </excludes>
                </configuration>
                <executions>
                    <!-- prepare agent for measuring integration tests -->
                    <execution>
                        <id>jacoco-initialize</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>jacoco-site</id>
                        <phase>package</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
Run Code Online (Sandbox Code Playgroud)

  • 这将从报告中删除整个包:​​`&lt;exclude&gt;com/mycompany/mypackage/**/*&lt;/exclude&gt;` (6认同)
  • 似乎类路径应该是**而没有`.class`结尾**,例如:`<exclude>**/*com/test/vaquar/khan/HealthChecker </ exclude>` (3认同)
  • 嗨 Vaquar,我一直在努力通过 jacoco maven 插件排除包。我不想在创建的 Index.html 上显示排除的包。如果你有代码,你可以做同样的事情,请帮助我。将代码发送至 imvrajendra@gmail.com (2认同)

小智 6

您可以在 jacoco 插件配置之外的声纳属性中配置覆盖排除:

...
<properties>
    ....
    <sonar.exclusions>
        **/generated/**/*,
        **/model/**/*
    </sonar.exclusions>
    <sonar.test.exclusions>
        src/test/**/*
    </sonar.test.exclusions>
    ....
    <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
    <sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
    <sonar.coverage.exclusions>
        **/generated/**/*,
        **/model/**/*
    </sonar.coverage.exclusions>
    <jacoco.version>0.7.5.201505241946</jacoco.version>
    ....
</properties>
....
Run Code Online (Sandbox Code Playgroud)

并记住从插件中删除排除设置


Ari*_*jit 5

另一种解决方案:

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.7.5.201505241946</version>
    <executions>
        <execution>
            <id>default-prepare-agent</id>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
        </execution>
        <execution>
            <id>default-report</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>report</goal>
            </goals>
        </execution>
        <execution>
            <id>default-check</id>
            <goals>
                <goal>check</goal>
            </goals>
            <configuration>
                <rules>
                    <rule implementation="org.jacoco.maven.RuleConfiguration">
                        <excludes>
                            <exclude>com.mypackage1</exclude
                            <exclude>com.mypackage2</exclude>
                        </excludes>
                        <element>PACKAGE</element>
                        <limits>
                            <limit implementation="org.jacoco.report.check.Limit">
                                <counter>COMPLEXITY</counter>
                                <value>COVEREDRATIO</value>
                                <minimum>0.85</minimum>
                            </limit>
                        </limits>
                    </rule>
                </rules>
            </configuration>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

请注意,我们"<element>PACKAGE</element>"在配置中使用它然后帮助我们在包级别排除。


小智 5

SonarQube 文档中的一些示例: 在此输入图像描述