关于 jacoco
面向 Java 开发者的 JaCoCo 速查技能,介绍 Maven 项目中的覆盖率配置、阈值、报告、排除项和 CI 实践。
主要功能
- 01Maven 覆盖率配置
- 02覆盖率阈值
- 03生成覆盖率报告
- 04排除指定类
- 05故障排查
适用场景
- 01在 Maven 构建中添加覆盖率检查
- 02查看行覆盖率和分支覆盖率
- 03排查覆盖率报告缺失问题
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ claude-dev-suite/ claude-dev-suite --skill jacoco安装后在 Claude Code 中输入/jacoco确认已加载。
详细介绍
JaCoCo - 快速参考
何时使用此技能
- 在 Java/Maven 项目中配置代码覆盖率
- 设置覆盖率阈值
- 在 CI/CD 中集成覆盖率
何时不使用此技能
- JavaScript/TypeScript 覆盖率 - 使用 Vitest 技能进行前端覆盖率统计
- SonarQube 配置 - 使用
sonarqube技能设置质量门禁 - 编写测试 - 使用 Spring Boot Test 或 JUnit 技能
- Gradle 项目 - JaCoCo 可以使用,但语法与 Maven 不同
深入了解:使用
mcp__documentation__fetch_docs,并将技术名称设为jacoco,以获取全面的文档。
基本模式
Maven 配置
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.12</version>
<executions>
<execution>
<id>prepare-agent</id>
<goals><goal>prepare-agent</goal></goals>
</execution>
<execution>
<id>report</id>
<phase>test</phase>
<goals><goal>report</goal></goals>
</execution>
<execution>
<id>check</id>
<goals><goal>check</goal></goals>
<configuration>
<rules>
<rule>
<element>BUNDLE</element>
<limits>
<limit>
<counter>LINE</counter>
<value>COVEREDRATIO</value>
<minimum>0.80</minimum>
</limit>
</limits>
</rule>
</rules>
</configuration>
</execution>
</executions>
</plugin>
排除项
<excludes>
<exclude>com.company.config.*</exclude>
<exclude>com.company.dto.*</exclude>
<exclude>com.company.entity.*</exclude>
<exclude>com.company.mapper.*Impl</exclude>
</excludes>
命令
mvn clean verify # Test + coverage check
mvn jacoco:report # Generate report
open target/site/jacoco/index.html # View report
计数器类型
| 计数器 | 描述 |
|---|---|
LINE | 代码行 |
BRANCH | 分支(if/switch) |
METHOD | 方法 |
反模式
| 反模式 | 不良影响 | 正确做法 |
|---|---|---|
| 追求 100% 覆盖率 | 收益递减,测试臃肿 | 以 80% 的 LINE 覆盖率和 70% 的 BRANCH 覆盖率为目标 |
| 将 DTO/实体纳入覆盖率统计 | 虚增数据,且没有逻辑需要测试 | 使用 <excludes> 排除 |
| 只检查 LINE 覆盖率 | 会遗漏未测试的分支 | 同时检查 LINE 和 BRANCH |
| CI 中没有覆盖率阈值 | 无法保障质量 | 添加带有最低值的 <check> 目标 |
| 排除过多代码 | 造成虚假的安全感 | 只排除生成的代码和配置代码 |
| 不对 jacoco.exec 进行版本控制 | 无法跟踪覆盖率趋势 | 在 CI 中归档报告 |
快速故障排除
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 覆盖率报告显示 0% | 测试运行时未启用 Agent | 确保在测试前运行 prepare-agent 目标 |
| 覆盖率检查导致构建失败 | 覆盖率低于阈值 | 添加测试,或调整 <limit> 中的最低值 |
| 报告没有排除任何内容 | 排除模式错误 | 使用完全限定名称(com.company.dto.*) |
| 报告缺少类 | 测试期间未加载这些类 | 添加集成测试以覆盖这些类 |
| CI 中的覆盖率低于本地 | 测试执行方式不同 | 确保 CI 运行所有测试阶段 |
| SonarQube 未显示覆盖率 | 报告路径错误 | 检查 sonar.coverage.jacoco.xmlReportPaths |
延伸阅读
如需了解高级配置:
mcp__documentation__fetch_docs
- 技术名称:
jacoco(MCP 中尚未提供 - 请使用官方文档)- JaCoCo 文档
评论
支持 Markdown