JaCoCo 未根据源文件生成覆盖率报告 - 方法名称不可点击
JaCoCo Not Generating Coverage Reports based on Source File - Method names not clickable
我有一个 Maven 多模块项目,其中 JaCoCo 未根据源文件生成报告。
一般来说,如果 MyService
是被测的 class,它会以两种方式报告,一种是通过文件名 MyService.html
在适当的基于包的位置,其中包含一个列表方法以数字和图表的形式给出覆盖率的总体情况 - 列出了 class 中的所有方法,每个方法都有一个可点击的 link 到另一个 html MyService.java.html
包含带有 red/green/yellow 背景的源代码以显示覆盖率状态。
在我的场景中,只生成了 MyService.html
而不是 MyService.java.html
和方法在前者中列出了覆盖细节,但没有 hyperlinks 到另一个报告显示如下。
这里的问题变得更有趣了,我的 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 版本,但 none 有所帮助,现在坚持使用最新的 0.8.2。 Maven 是最新的 - 3.6.0。除此之外,在子 pom 中配置的另一个插件是 PMD - 它的存在与否对报告没有任何影响。
类似问题:Gradle JaCoCo plugin - class and method names not clickable in report
在 Minimal, Complete, and Verifiable example that fully demonstrates steps to reproduce your difficulty, can only quote JaCoCo FAQ 缺席的情况下:
Why does the coverage report not show highlighted source code?
Make sure the following prerequisites are fulfilled to get source code
highlighting in JaCoCo coverage reports:
- Class files must be compiled with debug information to contain line
numbers.
- Source files must be properly supplied at report generation
time.
关于第一点,请参阅 javac
的 -g
选项、maven-compiler-plugin 的 debug
and debuglevel
选项。
对于第二点,确保源文件 Example.java
和
package org.example;
位于src/main/java/org/example/Example.java
谢谢! @戈丁
确保指定 SourceDirectory
也很重要。在我的例子中 - 针对 Groovy
源文件,为了详细覆盖,您应该指定 child Maven
结构如下:
<build>
<sourceDirectory>src/main/groovy</sourceDirectory>
<plugins> ... </plugins>
</build>
这是我遇到的问题的组合。源目录和使用调试编译选项。
再次感谢。
在我的例子中,<sourceDirectory>src/main/java</sourceDirectory>
已经在 <build>..here..<plugins>..</plugins>..</build>
部分定义,并且为 Java 编译打开了调试选项,但 JaCoCo 报告中的链接仍然不可点击。
我必须做的是,在 Jacoco Plugin 中定义 <sourceDirectory>
配置(在 <plugins>
部分中定义)
Ex: 现在链接可以使用了,而且在我的例子中,我将覆盖率报告 data/files 放在一个自定义文件夹 (coverage/jacoco-report) 而不是使用默认值。您可以使用许多其他配置 fields/settings。
<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>
我有一个 Maven 多模块项目,其中 JaCoCo 未根据源文件生成报告。
一般来说,如果 MyService
是被测的 class,它会以两种方式报告,一种是通过文件名 MyService.html
在适当的基于包的位置,其中包含一个列表方法以数字和图表的形式给出覆盖率的总体情况 - 列出了 class 中的所有方法,每个方法都有一个可点击的 link 到另一个 html MyService.java.html
包含带有 red/green/yellow 背景的源代码以显示覆盖率状态。
在我的场景中,只生成了 MyService.html
而不是 MyService.java.html
和方法在前者中列出了覆盖细节,但没有 hyperlinks 到另一个报告显示如下。
这里的问题变得更有趣了,我的 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 版本,但 none 有所帮助,现在坚持使用最新的 0.8.2。 Maven 是最新的 - 3.6.0。除此之外,在子 pom 中配置的另一个插件是 PMD - 它的存在与否对报告没有任何影响。
类似问题:Gradle JaCoCo plugin - class and method names not clickable in report
在 Minimal, Complete, and Verifiable example that fully demonstrates steps to reproduce your difficulty, can only quote JaCoCo FAQ 缺席的情况下:
Why does the coverage report not show highlighted source code?
Make sure the following prerequisites are fulfilled to get source code highlighting in JaCoCo coverage reports:
- Class files must be compiled with debug information to contain line numbers.
- Source files must be properly supplied at report generation time.
关于第一点,请参阅 javac
的 -g
选项、maven-compiler-plugin 的 debug
and debuglevel
选项。
对于第二点,确保源文件 Example.java
和
package org.example;
位于src/main/java/org/example/Example.java
谢谢! @戈丁
确保指定 SourceDirectory
也很重要。在我的例子中 - 针对 Groovy
源文件,为了详细覆盖,您应该指定 child Maven
结构如下:
<build>
<sourceDirectory>src/main/groovy</sourceDirectory>
<plugins> ... </plugins>
</build>
这是我遇到的问题的组合。源目录和使用调试编译选项。 再次感谢。
在我的例子中,<sourceDirectory>src/main/java</sourceDirectory>
已经在 <build>..here..<plugins>..</plugins>..</build>
部分定义,并且为 Java 编译打开了调试选项,但 JaCoCo 报告中的链接仍然不可点击。
我必须做的是,在 Jacoco Plugin 中定义 <sourceDirectory>
配置(在 <plugins>
部分中定义)
Ex: 现在链接可以使用了,而且在我的例子中,我将覆盖率报告 data/files 放在一个自定义文件夹 (coverage/jacoco-report) 而不是使用默认值。您可以使用许多其他配置 fields/settings。
<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>