JaCoCo报告生成中发生错误

时间:2019-03-27 15:38:42

标签: 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]

所有测试均顺利通过,因此这不是问题。

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文件,但无法将其打开以生成报告。我究竟做错了什么?

4 个答案:

答案 0 :(得分:2)

至少在我看来,这更为简单。我只需要运行 mvn clean verify ,一切都可以再次正常运行。

答案 1 :(得分:0)

我遇到了类似的问题。即使问题存在数月之久,我仍在写信,因为要弄清楚这是非常耗时的,并且没有大量的谷歌搜索为我提供了直接的答案,而只是提供了我必须自己拼凑的线索。


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

我的评估中有些猜测。这是我调查的底线:

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

示例片段:

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

参考文献:

答案 2 :(得分:0)

在我的情况下,字节数已更改为32。对于我来说,运行命令 mvn clean install 是有效的。我必须为我的项目运行此命令,然后成功生成Jacoco报告。

答案 3 :(得分:0)

就我而言,该错误不是很有帮助:

switch

我不得不调试插件执行,发现 org.jacoco.core.analysis.Analyzer 正在从目标/类文件夹中选择非 .class 文件,我在那里有模板等。一些他们中的一些人提出了一个关于不正确字符集的 MalformedInputException。修复是在插件配置中仅包含 .class 文件:

Execution jacoco-site of goal org.jacoco:jacoco-maven-plugin:0.8.3:report-aggregate failed: malformed input off : 61255, length : 1: Input length = 1 -> [Help 1]