我有一个Maven多模块项目,其中JaCoCo不会基于源文件生成报告。
通常,如果MyService
是受测试的类,则将以两种方式报告该问题,一种是通过文件名MyService.html
在适当的基于程序包的位置进行报告,并提供一系列方法的总体说明数字和图形的覆盖范围-列出了该类中所有方法的清单,每个方法都有一个可点击的链接,该链接指向另一个html MyService.java.html
,其中包含带有红色/绿色/黄色背景的源代码以显示覆盖范围状态。 >
在我的情况下,仅生成MyService.html
,而没有生成MyService.java.html
和方法(其中包含覆盖率详细信息,但没有指向如下所示的其他报告的超链接)。
问题在这里变得更加有趣,因为我的Maven配置未在此模块中配置,但是在父模块和其他子模块中能够正确生成报告。以下是Maven插件配置以供参考。
父POM:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.version}</version>
<configuration>
<destFile>${project.basedir}/target/jacoco-unit.exec</destFile>
<dataFile>${project.basedir}/target/jacoco-unit.exec</dataFile>
<append>true</append>
</configuration>
<executions>
<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>
儿童POM:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
</plugin>
尝试切换JaCoCo版本,但没有帮助,现在坚持使用最新的0.8.2。而Maven是最新的-3.6.0。除此之外,子pom中配置的另一个插件是PMD-其存在与否对报告没有任何影响。
类似的问题:Gradle JaCoCo plugin - class and method names not clickable in report
答案 0 :(得分:1)
在没有Minimal, Complete, and Verifiable example的情况下无法充分说明重现难度的步骤时,只能引用JaCoCo FAQ:
覆盖率报告为什么不显示突出显示的源代码?
确保满足以下先决条件才能获取源代码 在JaCoCo覆盖率报告中突出显示:
- 必须使用调试信息编译类文件以包含行 数字。
- 在生成报告时必须正确提供源文件 时间。
关于第一点,请参阅maven-compiler-plugin的-g
,debug
和debuglevel
选项。
第二点,请确保源文件javac
与
Example.java
位于package org.example;
答案 1 :(得分:1)
谢谢! @Godin
确保您指定SourceDirectory
也很重要。在我的情况下-针对Groovy
源文件,要进行详细介绍,您应该指定子 Maven
结构,如下所示:
<build>
<sourceDirectory>src/main/groovy</sourceDirectory>
<plugins> ... </plugins>
</build>
这是我所遇到的问题的组合。源目录和“使用调试编译”选项。 再次感谢。
答案 2 :(得分:0)
就我而言,<sourceDirectory>src/main/java</sourceDirectory>
已在 <build>..here..<plugins>..</plugins>..</build>
部分中定义。
我必须做的是,在 Jacoco 插件(定义内幕 <sourceDirectory>
部分)中定义 <plugins>
配置
例如:现在链接工作正常,而且在我的情况下,我将覆盖率报告数据/文件放在自定义文件夹中(coverage/jacoco-report) 而不是使用默认的。您可以使用许多其他配置字段/设置。
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.2</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<!-- attached to Maven test phase -->
<execution>
<id>report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
<configuration>
<sourceDirectory>src/main/java</sourceDirectory>
<!-- see above -->
<outputDirectory>coverage/jacoco-report</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>