Skip to content
forked from jacoco/jacoco

🔬 Java Code Coverage Library

License

Notifications You must be signed in to change notification settings

bitdata/jacoco

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Repository files navigation

JaCoCo Java Code Coverage Library

Build StatusMaven Central

JaCoCo is a free Java code coverage library distributed under the Eclipse Public License.

Starting Points

Git增量代码覆盖率分析功能

本版本新增了基于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 (解析为分支的最新提交)

使用示例

示例1: 分析自特定提交以来的代码

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文件的覆盖率。

示例2: 分析分支的所有代码

java -jar jacococli.jar report \ --classfiles target/classes \ --sourcefiles src/main/java \ --html report \ --branch feature/new-feature \ jacoco.exec

说明: 从feature/new-feature分支的第一次提交开始分析所有代码。

示例3: 使用提交哈希

java -jar jacococli.jar report \ --classfiles target/classes \ --sourcefiles src/main/java \ --xml report.xml \ --branch master \ --commit abc1234567890abcdef1234567890abcdef1234 \ jacoco.exec

示例4: 使用Git标签

java -jar jacococli.jar report \ --classfiles target/classes \ --sourcefiles src/main/java \ --html report \ --branch master \ --commit v1.0.0 \ jacoco.exec

示例5: Maven项目

mvn 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

示例6: Gradle项目

./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

工作原理

  1. 识别增量文件: 使用git diff获取自指定提交以来变更的Java源文件
  2. 路径映射: 将Java源文件路径映射到对应的类文件路径(支持Maven/Gradle标准目录结构)
  3. 文件过滤: 只分析变更文件对应的类文件
  4. 生成报告: 使用过滤后的文件列表生成覆盖率报告(格式与原有报告完全一致)

注意事项

  1. Git仓库要求: 必须在Git仓库目录中运行命令,或确保可以访问Git仓库
  2. 分支存在性: 指定的分支必须存在于Git仓库中
  3. 提交存在性: 指定的提交必须存在于指定分支的历史中
  4. 文件匹配: 系统会自动匹配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秒
  • 文件过滤开销可忽略不计
  • 增量分析可以显著减少分析时间(仅分析变更文件)

About

🔬 Java Code Coverage Library

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java82.7%
  • HTML9.4%
  • Kotlin2.6%
  • JavaScript2.3%
  • PowerShell1.5%
  • XSLT0.8%
  • Other0.7%