当前位置: 首页 > 知识库问答 >
问题:

JaCoCo未根据源文件生成覆盖报告-方法名称不可单击

胡承悦
2023-03-14

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

一般来说,如果MyService是被测试的类,它将以两种方式报告,一种是通过文件名MyService.html在适当的基于包的位置,其中包含一个方法列表,以数字和图表的形式给出覆盖范围的整体图片-列出类中的所有方法,每个方法都有一个指向另一个htmlMyService.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 插件 - 类和方法名称在报告中不可点击

共有3个答案

百里君博
2023-03-14

在我的例子中,

我要做的是定义

例如:现在链接正在工作,在我的情况下,我将覆盖范围报告数据/文件放在自定义文件夹(覆盖范围/jaco-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>

秦景福
2023-03-14

谢谢你!@戈丁

确保指定源目录也很重要。在我的例子中-使用<code>Groovy

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

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

严繁
2023-03-14

在缺乏最小的、完整的、可验证的例子来充分展示重现你的困难的步骤的情况下,只能引用JaCoCo FAQ:

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

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

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

对于第二点,确保源文件< code>Example.java包含

package org.example;

位于 src/主/爪哇/组织/示例/示例中.java

 类似资料:
  • 我试图设置为我的项目的代码覆盖 我的项目基于 下面是我项目的 然后我运行并看到以下内容 然后我运行,我看到 问题 -配置中有什么不正确 -如何生成报告? 谢啦

  • 我创建了一个使用Gradle的简单Java项目。我添加了一些单元测试和集成的JaCoCo插件来查看代码覆盖率。但是,在HTML报告中,我无法单击类名来查看覆盖了哪些行和分支。我有另一个项目,它使用Maven和JaCoCo来实现这个功能。这是Gradle插件的局限性,还是我做错了什么?这是我的身材。格雷德尔: 这是我看到的:

  • 当运行Gradle的Jacoco插件时,我在一组选定的类上得到零代码覆盖率报告。我已经确认测试这些类的所有单元测试都已成功运行。 非常有趣的是,EclEmma在Eclipse中生成了正确的代码覆盖率结果。我已经确认这两个工具使用的是相同版本的Jacoco。 我想知道这两种工具的区别是什么?我需要Gradle Jacoco插件的额外配置吗。 编辑:我的Gradle Jacoco输出显示“com类的执

  • 我一直试图从生成的覆盖报告中删除某些文件。我尝试了以下事情: 修改代码: 也试过, 我试图找到解决方案时提到的许多链接中的一些: Maven Jacoco配置-从不工作的报告中排除类/包 Jacoco如何正确排除包 如何在子项目中添加更多Jacoco排除? http://tdongsi.github.io/blog/2017/09/23/jacoco-in-maven-project/ 但是每次我

  • 我从Sonar GitHub repo中的“java gradle simple”示例开始: https://github.com/SonarSource/sonar-examples/tree/master/projects/languages/java/gradle/java-gradle-simple 我已经将jacoco插件添加到我的构建中。gradle文件在一个空文件中查看单元测试覆盖率