You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jacoco 0.8.7客户端-服务端模式下Jenkins插件显示代码覆盖率为0的问题排查

解决Jacoco 0.8.7客户端-服务端模式下Jenkins覆盖率显示0%的问题

从你的描述和错误日志来看,核心问题出在Jenkins尝试将二进制的jacoco.exec文件当作XML解析,导致出现UTF-8编码错误,最终覆盖率统计异常。结合你从Jacoco 0.7.4升级到0.8.7的背景,下面是具体的排查和解决步骤:

1. 修正Jenkins Jacoco插件的配置(最可能的原因)

错误日志里明确提到XML解析器在处理jacoco.exec时出错——但jacoco.exec是Jacoco生成的二进制执行数据文件,根本不是XML格式。这说明你的Jenkins Jacoco插件配置大概率指向了错误的文件:

  • 打开Jenkins任务的配置,找到Jacoco插件的设置项
  • 将“Path to exec files”替换为你Ant任务生成的XML报告路径:target/coverage-report/coverage-report.xml
  • 保存配置后重新构建,验证覆盖率是否正常显示

Jacoco 0.8.x版本对报告格式的兼容性有调整,旧版本0.7.4的插件可能支持直接解析jacoco.exec,但新版本的Jenkins Jacoco插件更依赖标准化的XML报告文件。

2. 确保jacoco.exec文件生成正常

先验证jacoco.exec本身没有损坏,用Jacoco的命令行工具手动生成报告:

java -jar jacococli.jar report /path/to/your/jacoco.exec \
  --classfiles target/classes \
  --html manual-report

如果能正常生成HTML报告,说明jacoco.exec是有效的,问题确实出在Jenkins插件的配置上;如果手动生成也失败,那需要检查dump过程是否有问题。

3. 完善Maven Jacoco Dump的配置

你的jacoco-maven-plugin的dump执行里没有指定destfile参数,可能导致生成的jacoco.exec路径不确定或被覆盖。建议加上明确的输出路径:

<execution>
  <id>default-cli</id>
  <phase>post-integration-test</phase>
  <goals>
    <goal>dump</goal>
  </goals>
  <configuration>
    <reset>${Reset}</reset>
    <address>${jacocoAgentHost}</address>
    <!-- 添加下面这行指定exec文件路径 -->
    <destfile>${basedir}/target/jacoco.exec</destfile>
  </configuration>
</execution>

这能确保Ant任务读取的jacoco.exec是正确生成的文件。

4. 检查Jenkins Jacoco插件版本兼容性

确保你的Jenkins Jacoco插件版本和Jacoco 0.8.7兼容:

  • Jacoco 0.8.7发布于2021年,对应的Jenkins Jacoco插件至少需要3.3.0版本(更高版本更佳)
  • 如果你的Jenkins插件版本过旧,升级后再重新构建测试

5. 验证生成的XML报告编码

你的Ant任务里已经指定了sourcefiles encoding="UTF-8",但可以手动检查生成的coverage-report.xml编码是否正确:

file target/coverage-report/coverage-report.xml

如果输出不是“UTF-8 Unicode text”,可以在Ant的report任务中添加全局编码配置:

<report encoding="UTF-8">
  <!-- 现有配置不变 -->
</report>

按照上面的步骤逐一排查,应该能解决覆盖率显示0%的问题。

内容的提问来源于stack exchange,提问作者Mehul Parmar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 21:32:51