在我的多模块项目中,我有一个代码并在单独的模块中进行测试。当我运行 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>
到目前为止,我尝试了互联网上的多种配置,但结果相同。感谢任何帮助或建议。
问题的原因有很多,但请考虑此步骤以找出配置丢失的部分。
检查数据文件位置: 在您的
multi-module-tests
模块的 pom.xml
中,确保在正确的位置生成 jacoco.exec
文件。 destFile
属性应指定保存 jacoco.exec
文件的完整路径,通常位于模块的目标目录中。
<configuration>
<destFile>${project.build.directory}/jacoco.exec</destFile>
</configuration>
检查包含模式: 在
jacoco-report
模块的 pom.xml
中,您的 <dataFileIncludes>
模式应与所有模块中 jacoco.exec
文件的位置相匹配。确保其设置正确以包含所有模块。
<dataFileIncludes>
<dataFileInclude>/target/jacoco.exec</dataFileInclude>
</dataFileIncludes>
确保正确的执行顺序: 运行
mvn clean install -DskipTests=false
时,请确保模块以正确的顺序执行。必须以正确的顺序解决模块之间的依赖关系,以确保正确收集覆盖率数据。
运行
verify
阶段:
确保运行 verify
阶段以在 jacoco-report
模块中生成报告,如 jacoco-report
模块的 pom.xml
中所指定。
mvn 干净验证
验证相对路径: 仔细检查 POM 文件中的相对路径是否正确配置,尤其是像
destFile
这样的属性。相对路径应基于当前模块的位置。
插件版本兼容性: 验证您使用的是 Maven、JaCoCo 和相关插件的兼容版本。不兼容可能会导致报告生成出现问题。
调试输出: 运行 Maven (
-X
) 时启用调试输出(mvn clean install -DskipTests=false -X
标志),以获取有关构建过程中发生的情况的更多详细信息。这可能有助于查明问题。
检查类路径配置: 确保在 POM 文件中为
jacoco-maven-plugin
和 maven-surefire-plugin
正确配置类和测试类目录。验证 includes
中的 jacoco-maven-plugin
部分是否涵盖了您想要包含在报告中的类。
进行这些调整后,尝试再次运行构建 (
mvn clean verify
) 并检查 JaCoCo 报告是否在 jacoco-report
模块中正确生成并包含预期的覆盖数据。
希望我有帮助。