Jacoco在多模块maven项目中找不到classes目录并生成空的html报告

问题描述 投票:0回答:1

在我的多模块项目中,我有一个代码并在单独的模块中进行测试。当我运行 maven 命令

'mvn clean install -DskipTests=false'
时,在测试模块中生成 jacoco.exec 文件,但 Jacoco 抱怨缺少类目录。在 jacoco-report 模块中,生成了报告,但报告是空的。

如何配置它来生成报告,或者更具体地说,如何将 Jacoco 指向类目录?

这是我的项目的结构:

来自“多模块”的我的 pom 文件:

 <build>
        <finalName>${project.artifactId}-${project.version}</finalName>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <release>11</release>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M3</version>
                <configuration>
                    <argLine>
                        --illegal-access=permit
                    </argLine>
                    <argLine>@{argLine}</argLine>
                    <trimStackTrace>false</trimStackTrace>
                    <skipTests>${skipTests}</skipTests>
                    <testFailureIgnore>true</testFailureIgnore>
                    <includes>
                        <include>**/*Test.java</include>
                    </includes>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <version>2.5.3</version>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.10</version>
                <configuration>
                    <destFile>${project.basedir}/../multi-module-core/target/jacoco.exec</destFile>
                </configuration>
                <executions>
                    <execution>
                        <id>prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>jacoco-site</id>
                        <goals>
                            <goal>report</goal>
                        </goals>
                        <configuration>
                            <dataFile>${project.basedir}/../multi-module-tests/target/jacoco.exec</dataFile>
                            <includes>
                                <include>${project.basedir}/../multi-module-core/target/classes/**</include>
                            </includes>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>`

来自“多模块核心”的 Pom 文件:

    <build>
        <finalName>${project.artifactId}-${project.version}</finalName>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <release>11</release>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.2.3</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <version>2.5.3</version>
            </plugin>
        </plugins>
    </build>

来自“多模块测试”的 Pom 文件:

   <build>
        <finalName>${project.artifactId}-${project.version}</finalName>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <release>11</release>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.18</version>
                <configuration>
                    <argLine>@{argLine}</argLine>
                    <skipTests>${skipTests}</skipTests>
                    <testFailureIgnore>true</testFailureIgnore>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-clean-plugin</artifactId>
                <version>2.5</version>
                <configuration>
                    <filesets>
                        <fileset>
                            <directory>.</directory>
                            <includes>
                                <include>**/*.log</include>
                            </includes>
                            <followSymlinks>false</followSymlinks>
                        </fileset>
                    </filesets>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <version>2.5.3</version>
            </plugin>
        </plugins>
    </build>

来自“jacoco-report”的 Pom 文件:

  <build>
        <plugins>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.10</version>
                <executions>
                    <execution>
                        <id>report-aggregate</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>report-aggregate</goal>
                        </goals>
                        <configuration>
                            <dataFileIncludes>
                                <dataFileInclude>**/jacoco.exec</dataFileInclude>
                            </dataFileIncludes>
                            <outputDirectory>
                                ${project.reporting.outputDirectory}/jacoco-aggregate
                            </outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

到目前为止,我尝试了互联网上的多种配置,但结果相同。感谢任何帮助或建议。

java jacoco jacoco-maven-plugin
1个回答
0
投票

问题的原因有很多,但请考虑此步骤以找出配置丢失的部分。

  1. 检查数据文件位置: 在您的

    multi-module-tests
    模块的
    pom.xml
    中,确保在正确的位置生成
    jacoco.exec
    文件。
    destFile
    属性应指定保存
    jacoco.exec
    文件的完整路径,通常位于模块的目标目录中。

    <configuration>
        <destFile>${project.build.directory}/jacoco.exec</destFile>
    </configuration>
    
  2. 检查包含模式: 在

    jacoco-report
    模块的
    pom.xml
    中,您的
    <dataFileIncludes>
    模式应与所有模块中
    jacoco.exec
    文件的位置相匹配。确保其设置正确以包含所有模块。

    <dataFileIncludes>
        <dataFileInclude>/target/jacoco.exec</dataFileInclude>
    </dataFileIncludes>
    
  3. 确保正确的执行顺序: 运行

    mvn clean install -DskipTests=false
    时,请确保模块以正确的顺序执行。必须以正确的顺序解决模块之间的依赖关系,以确保正确收集覆盖率数据。

  4. 运行

    verify
    阶段: 确保运行
    verify
    阶段以在
    jacoco-report
    模块中生成报告,如
    jacoco-report
    模块的
    pom.xml
    中所指定。

    mvn 干净验证

  5. 验证相对路径: 仔细检查 POM 文件中的相对路径是否正确配置,尤其是像

    destFile
    这样的属性。相对路径应基于当前模块的位置。

  6. 插件版本兼容性: 验证您使用的是 Maven、JaCoCo 和相关插件的兼容版本。不兼容可能会导致报告生成出现问题。

  7. 调试输出: 运行 Maven (

    -X
    ) 时启用调试输出(
    mvn clean install -DskipTests=false -X
    标志),以获取有关构建过程中发生的情况的更多详细信息。这可能有助于查明问题。

  8. 检查类路径配置: 确保在 POM 文件中为

    jacoco-maven-plugin
    maven-surefire-plugin
    正确配置类和测试类目录。验证
    includes
    中的
    jacoco-maven-plugin
    部分是否涵盖了您想要包含在报告中的类。

进行这些调整后,尝试再次运行构建 (

mvn clean verify
) 并检查 JaCoCo 报告是否在
jacoco-report
模块中正确生成并包含预期的覆盖数据。

希望我有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.