Jacoco如何正确排除包

10

我正在使用Jacoco Maven插件版本0.8.1(与Java 8 / Maven 3.1.0一起使用)。

无法使用路径排除使Jacoco正常工作。

我想要排除以下这些包:

  • my.package.model
  • my.package.exception

我尝试了以下方法:

<build>
      <plugins>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.1</version>
                <executions>
                    <execution>
                        <id>prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>  
                    </execution>
                </executions>
                <configuration>
                    <excludes>
                        <exclude>my.package.model</exclude>
                        <exclude>my.package.exception</exclude>
                    </excludes>
                </configuration>
            </plugin>
      </plugins>
</build>

<reporting>
        <plugins>
             <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.1</version>
                <configuration>
                    <excludes>
                        <exclude>my.package.model</exclude>
                        <exclude>my.package.exception</exclude>
                    </excludes>
                </configuration>
                <reportSets>
                    <reportSet>
                        <reports>
                            <report>report</report>
                        </reports>
                    </reportSet>
                </reportSets>
            </plugin>
        </plugins>
</reporting>

并且(对于 excludes 部分):
<excludes>
     <exclude>my.package.model**</exclude>
     <exclude>my.package.exception**</exclude>
</excludes>

<excludes>
     <exclude>my/package/model/**/*</exclude>
     <exclude>my/package/exception/**/*</exclude>
</excludes>

<excludes>
     <exclude>*/my/package/model/**/*</exclude>
     <exclude>*/my/package/exception/**/*</exclude>
</excludes>

<excludes>
     <exclude>**/my/package/model/**/*</exclude>
     <exclude>**/my/package/exception/**/*</exclude>
</excludes>

<excludes>
     <exclude>**/my/package/model/**</exclude>
     <exclude>**/my/package/exception/**</exclude>
</excludes>

<excludes>
     <exclude>**/my/package/model/*</exclude>
     <exclude>**/my/package/exception/*</exclude>
</excludes>

<excludes>
     <exclude>**/model/*</exclude>
     <exclude>**/exception/*</exclude>
</excludes>

<excludes>
     <exclude>**/model**</exclude>
     <exclude>**/exception**</exclude>
</excludes>

无法从最终报告中删除这些包...令人沮丧。
我阅读了以下内容: 没有任何作用。
有什么想法吗?
2个回答

12

我已经有了这个配置,并且它是有效的(请注意 excludes execution/configuration 中,而所有内容都在 pluginManagement 中):

<pluginManagement>
    <plugins>
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <executions>
                <execution>
                    <id>pre-integration-test</id>
                    <goals>
                        <goal>prepare-agent-integration</goal>
                    </goals>
                    <configuration>
                        <destFile>${project.build.directory}/integration-coverage-reports/jacoco-it.exec</destFile>
                        <excludes>
                            <exclude>weblogic/*</exclude>
                        </excludes>
                    </configuration>
                </execution>
                <execution>
                    <id>post-integration-test</id>
                    <phase>post-integration-test</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
                    <configuration>
                        <dataFile>${project.build.directory}/integration-coverage-reports/jacoco-it.exec</dataFile>
                        <outputDirectory>${project.reporting.outputDirectory}/jacoco-it</outputDirectory>
                        <excludes>
                            <exclude>my/company/package/db/entity/**/*.class</exclude>
                        </excludes>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</pluginManagement>

1
好的,谢谢!所以我已经更新了我的<reporting>部分,从<plugins>部分中删除了配置,并添加了带有*.class的包的完整路径。必须添加class扩展名。 - cactuschibre
文件夹结构也很重要:例如:**/webapp// 将排除 webapp 目录下的所有文件。 "" 代表目录,"" 代表文件。如果你只有 **/webapp/*,那么它不会排除 webapp 文件夹下的子文件夹。 - Smart Coder
看起来如果您想要从 Sonar 范围中排除某些内容,那么还需要进行 Sonar 排除。将以下代码包含在属性部分中,Sonar 会自动检测到并执行: <properties> <sonar.coverage.exclusions> /domains//*, /webapp//* </sonar.coverage.exclusions> </properties> - Smart Coder

5
根据您分享的示例,POM文件中的这个更改应该可以起作用:
<build>
      <plugins>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.1</version>
                <executions>
                    <execution>
                        <id>prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>  
                    </execution>
                </executions>
                <configuration>
                    <excludes>
                        <exclude>my/package/model/**/*.class</exclude>
                        <exclude>my/package/exception/**/*.class</exclude>
                    </excludes>
                </configuration>
            </plugin>
      </plugins>
</build>

<reporting>
        <plugins>
             <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.1</version>
                <configuration>
                    <excludes>
                        <exclude>my/package/model/**/*.class</exclude>
                        <exclude>my/package/exception/**/*.class</exclude>
                    </excludes>
                </configuration>
                <reportSets>
                    <reportSet>
                        <reports>
                            <report>report</report>
                        </reports>
                    </reportSet>
                </reportSets>
            </plugin>
        </plugins>
</reporting>

我通常将prepare-agent目标和report目标放在同一个插件中。这有助于我仅在一个部分下放置要排除的包。这是我的pom文件的样子:

<build>
    <plugins>
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.8.1</version>

            <configuration>
                <excludes>
                    <exclude>my/package/model/**/*.class</exclude>
                    <exclude>my/package/exception/**/*.class</exclude>
                </excludes>
            </configuration>

            <executions>
                <execution>
                    <id>prepare-agent</id>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>  
                </execution>
                <execution>
                    <id>post-unit-test</id>
                    <phase>test</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接