JaCoCo 报告生成出错

Joh*_*ohn 11 java maven jacoco jacoco-maven-plugin

我目前正在尝试将 JaCoCo 添加为我的 Spring Boot maven 项目的依赖项,以查看我的单元测试的代码覆盖率。但是,当我运行测试时,它失败并显示错误。

 Failed to execute goal org.jacoco:jacoco-maven-plugin:0.8.3:report (report) on project test-rest-service: An error has occurred in JaCoCo report generation. Error while creating report: malformed input around byte 2 -> [Help 1]
Run Code Online (Sandbox Code Playgroud)

所有测试都通过而没有失败,所以这不是问题。

JaCoCo 的依赖项是:

   <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.8.3</version>
            <executions>
                <execution>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
                <execution>
                    <id>report</id>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
                </execution>
            </executions>
    </plugin>
Run Code Online (Sandbox Code Playgroud)

生成了 JaCoCo.exec 文件,但我无法打开它来生成报告。我究竟做错了什么?

Fil*_*nti 14

我也遇到过类似的问题。我正在写这篇文章,尽管这个问题已经有几个月了,因为弄清楚它非常耗时,而且没有多少谷歌搜索能为我提供直接的答案,而只能提供我必须自己拼凑的线索。


就我而言,错误大约每三个构建发生一次。该错误也不总是与此问题中所述相同:字节数正在变化,有时我只是得到 EOFException 。

我的评估中有一定程度的猜测。以下是我调查的底线:

  • 该错误似乎是由于 JaCoCo 无法(完全)写入文件而发生的JaCoCo.exec,可能是由于相应的 VM 在写入操作完成(或开始)之前被终止。需要注意的是,JaCoCo 仅在虚拟机退出时才写入该文件。
  • 如果您进行多线程处理,则可能会由于仍在后台运行的线程导致超时maven-surefire-pluginmaven-failsafe-plugin触发而发生这种情况。确保所有线程都运行完成。
  • 如果问题是由计算机异常缓慢引起的,您应该能够通过在或中将该选项设置为大于默认秒数(或大于您当前设置的值)的forkedProcessExitTimeoutInSeconds值来解决该问题。这就是我的情况,因为我被迫在一个非常慢且内存受限的虚拟机上运行构建。30maven-surefire-pluginmaven-failsafe-plugin
  • 确保该forkCount属性大于您的or0中的值,并且未设置为,因为 JaCoCo 需要在分叉进程上工作,以便写入文件并随后拾取文件。maven-surefire-pluginmaven-failsafe-pluginforkModenever

示例片段:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.22.2</version>
    <configuration>
        <forkedProcessExitTimeoutInSeconds>60</forkedProcessExitTimeoutInSeconds>
        <forkCount>1</forkCount>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

参考:


s33*_*33h 12

至少就我而言,它更简单。我只需要运行mvn clean verify一切就又恢复正常了,没有任何问题。