【问题标题】:JaCoCo Not Generating Coverage Reports based on Source File - Method names not clickableJaCoCo 未根据源文件生成覆盖率报告 - 方法名称不可点击
【发布时间】:2019-05-18 15:46:59
【问题描述】:

我有一个 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

【问题讨论】:

    标签: java maven jacoco jacoco-maven-plugin


    【解决方案1】:

    在没有Minimal, Complete, and Verifiable example充分展示重现你的困难的步骤的情况下,只能引用JaCoCo FAQ

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

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

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

    关于第一点见javac-g选项,debug和maven-compiler-plugin的debuglevel选项。

    对于第二点,请确保源文件 Example.java

    package org.example;
    

    位于src/main/java/org/example/Example.java

    【讨论】:

    • 感谢@Godin,您的意见有所帮助。我从编译器插件配置开始,发现调试默认是打开的,我们没有在任何地方覆盖它。然后进入包结构,这就是问题所在。包 org.example 以某种方式创建在名为“org.example”的单个目录中,而不是“org”下的“example”。不确定我们是如何最终形成这种结构的,但修复后会按预期创建报告。
    【解决方案2】:

    谢谢! @戈丁

    确保指定SourceDirectory 也很重要。在我的情况下 - 使用 Groovy 源文件,为了详细覆盖,您应该指定 child Maven 结构,如下所示:

    <build>
            <sourceDirectory>src/main/groovy</sourceDirectory>
            <plugins> ... </plugins>
    </build>
    

    这是我的问题的组合。源目录和使用调试编译选项。 再次感谢。

    【讨论】:

      【解决方案3】:

      在我的例子中,&lt;sourceDirectory&gt;src/main/java&lt;/sourceDirectory&gt; 已经在 &lt;build&gt;..here..&lt;plugins&gt;..&lt;/plugins&gt;..&lt;/build&gt; 部分中定义,并且为 Java 编译打开了调试选项,但 JaCoCo 报告中的链接仍然不可点击。

      我要做的是,在 Jacoco Plugin 中定义&lt;sourceDirectory&gt; 配置(在&lt;plugins&gt; 部分中定义)

      例如:现在链接可以正常工作,而且在我的情况下,我将覆盖率报告数据/文件放入自定义文件夹(coverage/jacoco-report em>) 而不是使用默认值。您可以使用许多其他配置字段/设置。

          <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>
      

      【讨论】:

        猜你喜欢
        • 2018-09-09
        • 2022-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多