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秒
- 文件过滤开销可忽略不计
- 增量分析可以显著减少分析时间(仅分析变更文件)