JaCoCo is a free Java code coverage library distributed under the Eclipse Public License.
- I want to use JaCoCo → Download, Maven, Ant, CLI, Other
- I want to know how JaCoCo works → Documentation
- I have a question → FAQ, Documentation, User Forum
- I found a bug → Bug Report
- I have an idea → User Forum, Feature Request
本版本新增了基于Git的增量代码覆盖率分析功能,可以仅分析自指定提交以来的代码变更的测试覆盖率。
通过指定--branch和--commit参数,JaCoCo CLI的report命令现在支持增量代码覆盖率分析:
- 仅分析自指定提交以来变更的Java文件
- 支持所有Git标准提交引用格式(哈希、标签、相对引用等)
- 完全向后兼容:不指定增量参数时行为与原有JaCoCo完全一致
java -jar jacococli.jar report \
--classfiles <classfiles路径> \
--sourcefiles <sourcefiles路径> \
[--branch <分支名>] \
[--commit <提交标识>] \
[--html <输出目录>] \
[--xml <输出文件>] \
[--csv <输出文件>] \
<exec文件>--branch <分支名>: 指定Git分支名称,用于增量分析--commit <提交标识>: 指定起始提交(格式与git checkout兼容),如果省略则从该分支的第一次提交开始- 其他参数与原有JaCoCo CLI完全一致
--commit参数支持所有Git标准提交引用格式:
- 完整哈希:
abc1234567890abcdef1234567890abcdef1234 - 短哈希:
abc1234(至少7位) - 标签:
v1.0.0,release-1.0 - 相对引用:
HEAD~1,HEAD^,master~5 - 分支名:
master,develop(解析为分支的最新提交)
java -jar jacococli.jar report \
--classfiles target/classes \
--sourcefiles src/main/java \
--html report \
--branch master \
--commit HEAD~10 \
jacoco.exec说明: 从HEAD往前10个提交开始分析,只分析这10个提交中修改或新增的Java文件的覆盖率。
java -jar jacococli.jar report \
--classfiles target/classes \
--sourcefiles src/main/java \
--html report \
--branch feature/new-feature \
jacoco.exec说明: 从feature/new-feature分支的第一次提交开始分析所有代码。
java -jar jacococli.jar report \
--classfiles target/classes \
--sourcefiles src/main/java \
--xml report.xml \
--branch master \
--commit abc1234567890abcdef1234567890abcdef1234 \
jacoco.execjava -jar jacococli.jar report \
--classfiles target/classes \
--sourcefiles src/main/java \
--html report \
--branch master \
--commit v1.0.0 \
jacoco.execmvn clean test
java -jar jacococli.jar report \
--classfiles target/classes \
--sourcefiles src/main/java \
--html target/site/jacoco \
--branch master \
--commit HEAD~5 \
target/jacoco.exec./gradlew test jacocoTestReport
java -jar jacococli.jar report \
--classfiles build/classes/java/main \
--sourcefiles src/main/java \
--html build/reports/jacoco \
--branch develop \
--commit HEAD~3 \
build/jacoco/test.exec重要: 如果不指定--branch和--commit参数,命令行为与原有JaCoCo完全一致:
# 原有用法仍然有效,行为不变
java -jar jacococli.jar report \
--classfiles target/classes \
--sourcefiles src/main/java \
--html report \
jacoco.exec- 识别增量文件: 使用
git diff获取自指定提交以来变更的Java源文件 - 路径映射: 将Java源文件路径映射到对应的类文件路径(支持Maven/Gradle标准目录结构)
- 文件过滤: 只分析变更文件对应的类文件
- 生成报告: 使用过滤后的文件列表生成覆盖率报告(格式与原有报告完全一致)
- Git仓库要求: 必须在Git仓库目录中运行命令,或确保可以访问Git仓库
- 分支存在性: 指定的分支必须存在于Git仓库中
- 提交存在性: 指定的提交必须存在于指定分支的历史中
- 文件匹配: 系统会自动匹配Java源文件和类文件,但需要确保目录结构符合标准(Maven/Gradle)或可映射
如果出现错误,命令会输出明确的错误信息:
# 分支不存在
[ERROR] Branch 'nonexistent-branch' does not exist.
# 提交不存在
[ERROR] Commit 'invalid-commit' does not exist or cannot be resolved.
# 不是Git仓库
[ERROR] Current directory is not a Git repository.- Git操作通常<2秒
- 文件过滤开销可忽略不计
- 增量分析可以显著减少分析时间(仅分析变更文件)