Surefire插件导致Jacoco插件失效
原理
Jacoco插件在initialize阶段执行prepare-agent目标时会设置argLine参数
argLine set to -javaagent:D:\Develop\Apache\.m2\repository\org\jacoco\org.jacoco.agent\0.8.7\org.jacoco.agent-0.8.7-runtime.jar=destfile=E:\0\springside4\examples\showcase\target\jacoco.exec
Surefire插件在test阶段执行test目标时可能会设置argLine参数,如果有的话
Jacoco插件在test、package或verify阶段执行report目标时会使用argLine参数去查找jacoco.exec文件,如果argLine参数被Surefire插件覆盖了,则会因为找不到jacoco.exec文件而无法产生覆盖率报告
实践
问题:Jacoco无法产生报告,并报告没有exec文件
原因:Jacoco和Surefire都会使用argLine,Jacoco执行prepare-agent目标时生成的argLine在Surefire执行test目标时被覆盖,从而使得Jacoco执行report目标时因为找不到jacoco.exec文件无法产生报告
方案1:删除surefire configuration中的argLine
<!-- <argLine>-ArgLine</argLine> -->
方案2:修改surefire configuration中的argLine
<argLine>${argLine} -ArgLine</argLine>
方案3:添加jacoco execution configuration propertyName jacocoArgLine,修改surefire configuration中的argLine
<configuration>
<propertyName>jacocoArgLine</propertyName>
</configuration>
<argLine>${jacocoArgLine} -ArgLine</argLine>