执行mvn jacoco:report后,如何在控制台输出Jacoco覆盖率百分比?
如何将Jacoco覆盖率百分比输出到控制台(适配Jenkins环境)
我来分享几个实用的方案,帮你把Jacoco的覆盖率数据直接输出到控制台,完美适配Jenkins环境:
方案一:用Groovy脚本解析Jacoco XML报告输出
这种方法灵活性最高,能自定义输出你关心的任何覆盖率指标(行、类、方法等),步骤如下:
- 在你的
pom.xml中添加groovy-maven-plugin,配合Jacoco插件一起使用:
<build> <plugins> <!-- 基础Jacoco配置,确保生成报告文件 --> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.10</version> <executions> <execution> <goals> <goal>prepare-agent</goal> </goals> </execution> <execution> <id>report</id> <phase>test</phase> <goals> <goal>report</goal> </goals> </execution> </executions> </plugin> <!-- Groovy插件:解析Jacoco XML报告并打印到控制台 --> <plugin> <groupId>org.codehaus.gmaven</groupId> <artifactId>groovy-maven-plugin</artifactId> <version>2.1.1</version> <executions> <execution> <id>print-coverage-details</id> <phase>post-test</phase> <!-- 在test阶段后执行 --> <goals> <goal>execute</goal> </goals> <configuration> <source> // 读取Jacoco生成的XML报告 def jacocoXml = new XmlSlurper().parse(new File("target/site/jacoco/jacoco.xml")) // 提取行覆盖率 def lineCounter = jacocoXml.counter.find { it.@type == "LINE" } def coveredLines = lineCounter.@covered.toInteger() def totalLines = lineCounter.@missed.toInteger() + coveredLines def lineCoverageRate = String.format("%.2f", (coveredLines * 100.0) / totalLines) // 提取类覆盖率 def classCounter = jacocoXml.counter.find { it.@type == "CLASS" } def coveredClasses = classCounter.@covered.toInteger() def totalClasses = classCounter.@missed.toInteger() + coveredClasses def classCoverageRate = String.format("%.2f", (coveredClasses * 100.0) / totalClasses) // 控制台输出格式化后的覆盖率信息 println "\n=== Jacoco Coverage Summary ===" println "Total Lines: ${totalLines} | Covered Lines: ${coveredLines} | Line Coverage: ${lineCoverageRate}%" println "Total Classes: ${totalClasses} | Covered Classes: ${coveredClasses} | Class Coverage: ${classCoverageRate}%" println "===============================\n" </source> </configuration> </execution> </executions> </plugin> </plugins> </build>
- 执行构建命令:
mvn clean test
执行后,你就能在控制台看到清晰的覆盖率汇总了。如果已经生成了Jacoco报告,也可以单独执行Groovy脚本:
mvn groovy:execute@print-coverage-details
方案二:利用Jacoco的check目标输出覆盖率
如果不需要自定义格式,用Jacoco自带的check目标就能快速输出覆盖率数据,还能在Jenkins里直接看到:
- 调整Jacoco插件配置,添加
check执行目标:
<plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.10</version> <executions> <execution> <goals> <goal>prepare-agent</goal> </goals> </execution> <execution> <id>report</id> <phase>test</phase> <goals> <goal>report</goal> </goals> </execution> <execution> <id>check-coverage</id> <phase>test</phase> <goals> <goal>check</goal> </goals> <configuration> <rules> <!-- 设置最低覆盖率要求为0,避免因覆盖率不达标导致构建失败 --> <rule> <element>BUNDLE</element> <limits> <limit> <counter>LINE</counter> <value>COVEREDRATIO</value> <minimum>0.0</minimum> </limit> </limits> </rule> </rules> <failOnViolation>false</failOnViolation> </configuration> </execution> </executions> </plugin>
- 执行命令:
mvn clean jacoco:check
控制台会输出类似这样的信息:
[INFO] --- jacoco-maven-plugin:0.8.10:check (check-coverage) @ your-project --- [INFO] Loading execution data file /your-project/target/jacoco.exec [INFO] Analyzed bundle 'your-project' with 15 classes [INFO] Bundle your-project: 78.5% covered lines (110/140), 80% covered classes (12/15) [INFO] All coverage checks passed.
方案三:Jenkins中直接用Shell/Batch解析CSV报告
如果你的Jenkins构建是基于Shell或Batch命令,还可以直接读取Jacoco生成的CSV报告(路径:target/site/jacoco/jacoco.csv),用简单的命令提取覆盖率:
Linux/macOS(Shell命令):
在Jenkins的构建步骤中添加以下命令(放在mvn jacoco:report之后):
# 提取行覆盖率 LINE_COVERAGE=$(awk -F ',' '/Total/{print $4}' target/site/jacoco/jacoco.csv) # 提取类覆盖率 CLASS_COVERAGE=$(awk -F ',' '/Total/{print $2}' target/site/jacoco/jacoco.csv) echo "=== Jacoco Coverage (Jenkins) ===" echo "Line Coverage: ${LINE_COVERAGE}%" echo "Class Coverage: ${CLASS_COVERAGE}%"
Windows(Batch命令):
for /f "tokens=2,4 delims=," %%a in ('findstr "Total" target\site\jacoco\jacoco.csv') do ( echo === Jacoco Coverage (Jenkins) === echo Class Coverage: %%a%% echo Line Coverage: %%b%% )
执行后,Jenkins的控制台输出里就会显示覆盖率数据了。
内容的提问来源于stack exchange,提问作者niraj.nijju
相关产品推荐
相关产品推荐

