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

