用例改成并行执行后总时长降了一半,覆盖率从 85% 掉到 60%,报告里好几个类直接显示未执行。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,多个执行器各自往同一个 exec 文件里写,后写的把手里的覆盖数据覆盖掉,最后只剩一个进程的采样,未被这部分进程碰到的类自然算成零覆盖。
「jacoco 并行覆盖率」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。报错里带路径的,先去看那个路径在不在、权限对不对。
-Djacoco.destFile=target/jacoco-${PID}.exec
mvn jacoco:merge -Djacoco.dataFile=target/merged.exec
mvn jacoco:report
同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。
具体做法是,给每个执行器指定独立的输出路径;跑完用合并任务汇总所有 exec;报告阶段基于合并后的文件生成。
最后用这个标准收尾,合并后的覆盖率和串行时持平,报告里没有整类缺失。
