如何从 jacoco 报告中正确排除和包含类、包和 jar 类、lib(离线仪器)

Did*_* G. 8 java maven jacoco jacoco-maven-plugin

我正在使用 JaCoCo 代码覆盖率,但报告包括来自 jar、lib 的类。(离线检测,Maven)

我解决了离线配置的问题,因为“aspectj-maven-plugin”正在更改类文件,现在我也成功地排除了target/classes->之外的包src。感谢stackoverflow 中的这个答案。但是现在我从报告中的 jar、lib 获取类,我不知道如何排除。我在下面显示我的配置和示例

我也试过这个解决方案Exclude classes of jar files from jacoco coverage report但它对我不起作用。 <exclude>**/lib/*</exclude>

我的jacoco离线配置:

<properties>
  <jacoco.version>0.8.4</jacoco.version>
  <argLine></argLine>
</properties>


<dependency>
  <groupId>org.jacoco</groupId>
  <artifactId>org.jacoco.agent</artifactId>
  <classifier>runtime</classifier>
  <version>${jacoco.version}</version>
</dependency>

            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>${jacoco.version}</version>
                <executions>
                    <execution>
                    <goals>
                        <goal>instrument</goal>
                        <goal>restore-instrumented-classes</goal>
                        <goal>report</goal>
                    </goals>
                    <configuration>
                        <!-- this configuration affects all goals -->
                        <excludes>
                            <exclude>*</exclude>
                            <exclude>com/company/rrPackage/**/*.class</exclude>
                            <exclude>org/**/*.class</exclude>                                               
                        </excludes>
                    </configuration>
                    </execution>
                </executions>
            </plugin>
Run Code Online (Sandbox Code Playgroud)

万无一失的插件

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.15</version>
                <configuration>
                    <testNGArtifactName>...</testNGArtifactName>
                    <suiteXmlFiles>
                        <suiteXmlFile>...</suiteXmlFile>
                    </suiteXmlFiles>
                    <skip>${skip.test}</skip>
                    <systemPropertyVariables>
                        <jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile>                       
                    </systemPropertyVariables>
                    <properties>
                        ... 
                    </properties>
                </configuration>
            </plugin>
Run Code Online (Sandbox Code Playgroud)

以及我认为我从 de jacoco:report 中的 jar 获取课程的原因。在我的 pom.xml 中,我有以下依赖项:

<dependency>
    <groupId>org.hsqldb</groupId>
    <artifactId>hsqldb</artifactId>
    <version>2.2.9</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我的课程中也有一些像这样的导入

import org.hsqldb.lib.StringUtil;
Run Code Online (Sandbox Code Playgroud)

例如:这对 pom.xml 没有依赖,但在项目类之一中使用,并且 jacoco 在报告中显示它

import javax.mail.internet.AddressException;
Run Code Online (Sandbox Code Playgroud)

我有其他具有相同行为的情况会导致相同的问题:Jacoco 在报告中显示 jar 中的那些类,如图所示

在此处输入图片说明 在此处输入图片说明

小智 6

尝试includes代替excludes. 请注意,最后需要 .class。尝试这样的事情:

<configuration>
    <includes>
        <include>com/company/package/**/*.class</include>
    </includes>
</configuration>
Run Code Online (Sandbox Code Playgroud)

根据您的示例:

           <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>${jacoco.version}</version>
                <executions>
                    <execution>
                    <goals>
                        <goal>instrument</goal>
                        <goal>restore-instrumented-classes</goal>
                        <goal>report</goal>
                    </goals>
                    <configuration>
                        <!-- this configuration affects all goals -->
                        <includes>
                            <include>com/company/packageToInclude/**/*.class</include>                                               
                        </includes>
                    </configuration>
                    </execution>
                </executions>
            </plugin>
Run Code Online (Sandbox Code Playgroud)

  • 我太专注于寻找如何在“lib”文件夹下“排除”这些类的解决方案,而我从未考虑过这个解决方案。这确实解决了我的问题! (2认同)