JaCoCo不基于源文件生成覆盖率报告-方法名称不可单击

时间:2018-12-18 08:56:41

标签: java maven jacoco jacoco-maven-plugin

我有一个Maven多模块项目,其中JaCoCo不会基于源文件生成报告。

通常,如果MyService是受测试的类,则将以两种方式报告该问题,一种是通过文件名MyService.html在适当的基于程序包的位置进行报告,并提供一系列方法的总体说明数字和图形的覆盖范围-列出了该类中所有方法的清单,每个方法都有一个可点击的链接,该链接指向另一个html MyService.java.html,其中包含带有红色/绿色/黄色背景的源代码以显示覆盖范围状态。 >

在我的情况下,仅生成MyService.html,而没有生成MyService.java.html和方法(其中包含覆盖率详细信息,但没有指向如下所示的其他报告的超链接)。

enter image description here

问题在这里变得更加有趣,因为我的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

3 个答案:

答案 0 :(得分:1)

在没有Minimal, Complete, and Verifiable example的情况下无法充分说明重现难度的步骤时,只能引用JaCoCo FAQ

  

覆盖率报告为什么不显示突出显示的源代码?

     

确保满足以下先决条件才能获取源代码   在JaCoCo覆盖率报告中突出显示:

     
      
  • 必须使用调试信息编译类文件以包含行   数字。
  •   
  • 在生成报告时必须正确提供源文件   时间。
  •   

关于第一点,请参阅maven-compiler-plugin的-gdebugdebuglevel选项。

第二点,请确保源文件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>