首先在项目的主pom中加以下依赖
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.7</version>
<executions>
<execution>
<id>jacoco-initialize</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<!--这个report:对代码进行检测,然后生成index.html在target/jacoco-ut/index.html中可以查看检测的详细结果-->
<execution>
<id>jacoco-site</id>
<phase>test</phase>
<!--<phase>package</phase>写上test的时候会自动出现jacoco-ut文件夹,而不需执行下面的jacoco:report步骤,推荐-->
<goals>
<goal>report</goal>
</goals>
<configuration>
<dataFile>target/jacoco.exec</dataFile>
<outputDirectory>target/jacoco-ut</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.21.0</version>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
<forkMode>once</forkMode>
<reuseForks>true</reuseForks>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.8.0.2131</version>
</plugin>
然后在jenkins中配置
# project key 就是上面得到的,不能错
sonar.projectKey=test-b
sonar.projectName=test-b
sonar.projectVersion=1.0
sonar.language=java
sonar.sourceEncoding=UTF-8
sonar.sources=$WORKSPACE
sonar.java.binaries=$WORKSPACE
#测试类的字节码文件路径,不支持通配符
sonar.java.test.binaries=target/test-classes
sonar.junit.reportsPath=target/surefire-reports
# 代码覆盖率插件
sonar.java.coveragePlugin=jacoco
# jacoco插件版本
jacoco.version=0.8.7
# jacoco.exec文件路径
# 项目的jacoco.exec文件路径
sonar.jacoco.reportPath=$WORKSPACE/**/target/jacoco.exec
sonar.coverage.jacoco.xmlReportPaths=$WORKSPACE/**/target/jacoco-ut/jacoco.xml
有个大坑就是,试了很长时间构建一个项目,单元测试覆盖率报告就是出不来,jacoco文件也没生成,原因是项目路径有问题,执行单元测试覆盖路的前提是必须有test路径也就是个src下面的和main同级,否则会跳过
jacoco覆盖率只识别src/test/java路径下的单元测试,不成功的单元测试也会跳过的
这样就会生成jacoco单元测试覆盖率