JaCoCo 报告生成中发生错误

2022-09-03 13:50:48

我目前正在尝试添加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]

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

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>

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


答案 1

至少在我的情况下,它更直接。我只需要运行mvn干净验证,一切都再次工作,没有任何问题。


答案 2

我一直遇到类似的问题。我正在写,即使这个问题已经有几个月的历史了,因为弄清楚它非常耗时,而且没有多少谷歌搜索为我提供了直接的答案,而只是我必须自己拼凑的线索。


在我的情况下,错误大约每三个版本发生一次。错误也不总是与这个问题中所说的相同:字节数正在变化,有时我只是得到了一个EOFException。

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

  • 该错误似乎是由于 JaCoCo 无法(完全)写入文件而发生的,可能是由于相应的 VM 在写入操作完成(或启动)之前被终止。请注意,JaCoCo 仅在 VM 退出时写入所述文件。JaCoCo.exec
  • 如果执行多线程处理,则可能会发生这种情况,因为线程仍在后台运行,从而导致超时或触发。确保所有线程都运行到完成。maven-surefire-pluginmaven-failsafe-plugin
  • 如果问题是由计算机的异常缓慢引起的,则应该能够通过将选项设置为大于 or 中的默认秒数(或大于当前设置的值)来克服该问题。这就是我的情况,因为我被迫对一个非常慢且内存受限的VM运行构建。forkedProcessExitTimeoutInSeconds30maven-surefire-pluginmaven-failsafe-plugin
  • 确保该属性大于您的 or 中,并且设置为 JaCoCo 需要处理分叉进程,以便写入文件,从而在之后拾取文件。forkCount0maven-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>

引用:


推荐