# jacoco_cpxt **Repository Path**: tain198127/jacoco_cpxt ## Basic Information - **Project Name**: jacoco_cpxt - **Description**: 将jacoco的结果转换为xlsx的工具。这是作为自动化代码单元测试的前置动作。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-04 - **Last Updated**: 2026-07-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # JaCoCo Coverage Report Tool JaCoCo HTML覆盖率报告解析工具,将方法级别的覆盖率数据导出到Excel文件。 ## 功能特性 - 解析JaCoCo生成的HTML覆盖率报告 - 提取方法级别的覆盖率数据 - 导出为Excel格式(.xlsx) - 支持自定义GroupId、ArtifactId和输出路径 ## 软件架构 ``` jacoco_cpxt/ ├── pom.xml # Maven配置文件 ├── src/ │ └── main/ │ └── java/ │ └── cn/nc/jacoco/ │ └── JacocoReportToExcel.java # 主程序 ├── target/ │ ├── jacoco-cpxt-1.0.0.jar # 普通JAR包 │ ├── jacoco-cpxt-1.0.0-all.jar # 可执行JAR(包含所有依赖) │ └── lib/ # 依赖库目录 └── output/ # 默认输出目录 ``` ### 技术栈 | 组件 | 版本 | 用途 | |------|------|------| | Java | 1.8+ | 运行环境 | | Jsoup | 1.15.4 | HTML解析 | | Apache POI | 5.2.3 | Excel文件生成 | | Maven | 3.x | 项目构建 | ### 核心类说明 **JacocoReportToExcel.java** - `MethodCoverage`: 内部类,封装方法覆盖率数据实体 - `parseAndExport()`: 主入口方法,解析报告并导出Excel - `parseClassFile()`: 解析单个类的HTML文件,提取方法级覆盖率 - `exportToExcel()`: 将数据导出为Excel文件 ## 主流程 ``` ┌─────────────────────────────────────────────────────────────────┐ │ 程序启动 │ │ (命令行参数解析) │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Step 1: 解析 index.html │ │ 获取所有 package 列表 │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Step 2: 遍历每个 package │ │ 解析 package/index.html │ │ 获取所有 class 列表 │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Step 3: 遍历每个 class │ │ 解析 ClassName.html │ │ 提取方法级覆盖率数据: │ │ - 方法名 │ │ - 复杂度 (Cxty) │ │ - 分支覆盖率 (Branch Coverage) │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Step 4: 生成 Excel 文件 │ │ - 创建表头(带样式) │ │ - 填充数据 │ │ - 自动调整列宽 │ │ - 保存到指定目录 │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ 程序结束 │ │ 输出文件: jacoco-method-coverage-时间戳.xlsx │ └─────────────────────────────────────────────────────────────────┘ ``` ## JaCoCo报告目录结构 程序解析的JaCoCo HTML报告目录结构如下: ``` target/site/jacoco/ ├── index.html # 主页,包含所有package列表 ├── jacoco.csv # CSV格式报告(类级别) ├── jacoco.xml # XML格式报告 ├── jacoco-resources/ # 样式资源 └── cn.nc.xxx.xxx/ # package目录 ├── index.html # package页,包含所有class列表 ├── ClassName.html # class页,包含所有method覆盖率 └── ClassName.java.html # 源码高亮页 ``` ## 编译 ```bash cd XXXX/code/jacoco_cpxt # 编译并打包 mvn clean package # 跳过测试编译 mvn clean package -DskipTests ``` 编译完成后生成: - `target/jacoco-cpxt-1.0.0.jar` - 普通JAR包 - `target/jacoco-cpxt-1.0.0-all.jar` - 可执行JAR(推荐使用) ## 使用方法 ### 命令格式 ```bash java -jar jacoco-cpxt-1.0.0-all.jar [输出目录] ``` ### 参数说明 | 参数 | 必填 | 说明 | 示例 | |------|------|------|------| | jacoco报告路径 | 是 | JaCoCo HTML报告目录(包含index.html) | `target/site/jacoco` | | groupId | 是 | Maven项目的groupId | `cn.nc` | | artifactId | 是 | Maven项目的artifactId | `xxxx-yy-zz-service` | | 输出目录 | 否 | Excel文件输出目录,默认当前目录 | `./output` | ### 使用示例 ```bash # 基本用法 java -jar target/jacoco-cpxt-1.0.0-all.jar \ "/path/to/project/target/site/jacoco" \ "cn.nc" \ "xxxx-yy-zz-service" \ "./output" # 输出到当前目录 java -jar target/jacoco-cpxt-1.0.0-all.jar \ "target/site/jacoco" \ "cn.nc" \ "my-project" ``` ### 查看帮助 ```bash java -jar target/jacoco-cpxt-1.0.0-all.jar ``` 输出: ``` Usage: java -jar jacoco-cpxt-1.0.0-all.jar [output-path] Arguments: jacoco-report-path JaCoCo HTML report directory (contains index.html) groupId Maven groupId (e.g., cn.nc) artifactId Maven artifactId (e.g., xxxx-yy-zz-service) output-path Output directory for Excel file (default: current directory) Example: java -jar jacoco-cpxt-1.0.0-all.jar target/site/jacoco cn.nc xxxx-yy-zz-service ./output ``` ## 输出格式 生成的Excel文件包含以下列: | 列名 | 类型 | 说明 | 示例 | |------|------|------|------| | group | 文本 | Maven groupId | `cn.nc` | | project | 文本 | Maven artifactId | `xxxx-yy-zz-service` | | package | 文本 | Java包名 | `xxxx-yy-zz.service.impl` | | className | 文本 | 类的全名称(package.class) | xxxx-yy-zz.service.impl.AccountWhiteListServiceImpl` | | method | 文本 | 方法的全名称(package.class#method) | xxxx-yy-zz.service.impl.ListServiceImpl#StatusModify(xxxxPo)` | | score | 数字 | 圈复杂度(n/a转为0) | `6` | | 覆盖率 | 百分比 | 分支覆盖率(数字格式百分比,n/a转为0%) | `12%` / `0%` | ### 输出文件命名 ``` jacoco-method-coverage-yyyy-MM-dd-HH-mm-ss.xlsx ``` 示例:`jacoco-method-coverage-2026-01-04-13-45-35.xlsx` ## 常见问题 ### Q: 报错 "JaCoCo report index.html not found" 确保指定的路径是JaCoCo HTML报告的根目录,该目录下应包含`index.html`文件。 ```bash # 检查目录结构 ls /path/to/target/site/jacoco/index.html ``` ### Q: 如何生成JaCoCo HTML报告? 在Maven项目中添加JaCoCo插件,运行测试后生成报告: ```bash # 运行测试并生成报告 mvn clean test jacoco:report # 报告位置 target/site/jacoco/index.html ``` ### Q: Excel文件中score列是什么含义? score是Cyclomatic Complexity(圈复杂度)的值,表示方法的逻辑复杂度: - 1-10: 简单,低风险 - 11-20: 中等复杂度 - 21-50: 复杂,高风险 - 50+: 非常复杂,建议重构 ### Q: 覆盖率为0是什么意思? 表示该方法的分支覆盖率为0%,或者该方法没有分支语句(原值为n/a,已转换为0)。 ## 版本历史 | 版本 | 日期 | 说明 | |------|------|------| | 1.0.2 | 2026-01-04 | 覆盖率列改为数字格式的百分比显示 | | 1.0.1 | 2026-01-04 | score和覆盖率列改为数字类型,n/a转换为0 | | 1.0.0 | 2026-01-04 | 初始版本,支持方法级覆盖率导出 | ## 许可证 本项目仅供内部使用。