最近收到了同事们关于sonar coverage的complain,会有这样的现象,在本地idea或者jenkins扫描出来的coverage远远比sonar上显示的多。事关代码质量的问题还是比较严肃的,所以比较了下代码,发现同样的UT,用powerMock写的report里并不包含它们,但是在本地扫描的时候还是会出现。
看了下官网描述,说插件不兼容,要用jacoco的离线模式。
JaCoCo Offline Instrumentation works only with PowerMock version 1.6.6 and above.
https://github.com/powermock/powermock/wiki/Code-coverage-with-JaCoCo
那么参考了下网上pom的描述,修改原先扫描的jacoco插件配置:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.version}</version>
<executions>
<execution>
<id>default-instrument</id>
<goals>
<goal>instrument</goal>
</goals>
</execution>
<execution>
<id>default-restore-instrumented-classes</id>
<goals>
<goal>restore-instrumented-classes</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
<configuration>
<dataFile>${project.build.directory}/coverage.exec</dataFile>
</configuration>
</execution>
</executions>
</plugin>
当然我们在实际使用过程中还遇到了report能出来,但是validate过不了,后来想到的方法是把这部分配置写在profile里,这样在编译的时候不指定profile运行,而只让他在扫描分析的时候进行工作。
网友评论