jacoco整理

本文档详细介绍了jacoco的二次开发,主要增加了增量代码匹配功能。改造包括新增和修改特定类,具体改造内容可在commit历史中查看。使用方法涉及下载源码、执行校验、构建jar包及配置增量覆盖率参数。此外,还提供了多模块工程的jacoco报告生成命令参考,以及利用dom4j动态替换XML和jacoco合并exec的相关工具和依赖。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

改造内容:

  • 新增类:所有新增类处于org.jacoco.core.internal.diff包下面;
  • 修改类:主要修改了核心类org.jacoco.core.analysis.Analyzer,org.jacoco.core.analysis.CoverageBuilder;org.jacoco.core.internal.flowClassProbesAdapter
  • 所有修改内容在commit记录可查,为了方便查看,我尽量减少了commit的次数

使用方法

1、 下载源码,先运行mvn spotless:apply 主要是jacoco进行了文件头文件校验,如果新加入了类或者修改了类,需要重新校验,所以要先运行此命令
2、 然后运行
maven: mvn clean package   -Dmaven.test.skip=true   -Dmaven.javadoc.skip=true
3、 其中org.jacoco.cli-0.8.7-SNAPSHOT-nodeps.jar为构建出的我们需要的包(我已经构建好,懒得编译从这里下载下载地址

在这里插入图片描述

4、 其他包都可以使用jacoco官方包,但是版本最好保持一致,也可以用我们自己构建出的包,report时使用我们构建的包,如果是增量覆盖率加入参数–diffCode=
"[{\"classFile\":\"com/dr/code/diff/config/GitConfig\",\"methodInfos\":[{\"methodName\":\"cloneRepository\",\"parameters\":\"String gitUrl,String codePath,String commitId\"},{\"methodName\":\"diffMethods\",\"parameters\":\"DiffMethodParams diffMethodParams\"},{\"methodName\":\"getClassMethods\",\"parameters\":\"String oldClassFile,String mewClassFile,DiffEntry diffEntry\"}],\"type\":\"MODIFY\"},{\"classFile\":\"com/dr/code/diff/controller/CodeDiffController\",\"methodInfos\":[{\"methodName\":\"getList\",\"parameters\":\"@ApiParam(required = true, name = \\\"gitUrl\\\", value = \\\"git远程仓库地址\\\") @RequestParam(value = \\\"gitUrl\\\") String gitUrl,@ApiParam(required = true, name = \\\"baseVersion\\\", value = \\\"git原始分支或tag\\\") @RequestParam(value = \\\"baseVersion\\\") String baseVersion,@ApiParam(required = true, name = \\\"nowVersion\\\", value = \\\"git现分支或tag\\\") @RequestParam(value = \\\"nowVersion\\\") String nowVersion\"}],\"type\":\"MODIFY\"},{\"classFile\":\"com/dr/code/diff/service/impl/CodeDiffServiceImpl\",\"methodInfos\":[{\"methodName\":\"getDiffCode\",\"parameters\":\"DiffMethodParams diffMethodParams\"}],\"type\":\"MODIFY\"},{\"classFile\":\"com/dr/common/utils/string/ScmStringUtil\",\"methodInfos\":[],\"type\":\"ADD\"}]"

便于读写上边转json如下:

[
    {
   
   
        "classFile":"com/dr/code/diff/config/GitConfig",
        "methodInfos":[
            {
   
   
                "methodName":"cloneRepository",
                "parameters":"String gitUrl,String codePath,String commitId"
            },
            {
   
   
                "methodName":"diffMethods",
                "parameters":"DiffMethodParams diffMethodParams"
            },
            {
   
   
                "methodName":"getClassMethods",
                "parameters":"String oldClassFile,String mewClassFile,DiffEntry diffEntry"
            }
        ],
        "type":"MODIFY"
    },
    {
   
   
        "classFile":"com/dr/code/diff/controller/CodeDiffController",
        "methodInfos":[
            {
   
   
                "methodName":"getList",
                "parameters":"@ApiParam(required = true, name = \\"gitUrl\\", value = \\"git远程仓库地址\\") @RequestParam(value = \\"gitUrl\\") String gitUrl,@ApiParam(required = true, name = \\"baseVersion\\", value = \\"git原始分支或tag\\") @RequestParam(value = \\"baseVersion\\") String baseVersion,@ApiParam(required = true, name = \\"nowVersion\\", value = \\"git现分支或tag\\") @RequestParam(value = \\"nowVersion\\") String nowVersion"
            }
        ],
        "type":"MODIFY"
    },
    {
   
   
        "classFile":"com/dr/code/diff/service/impl/CodeDiffServiceImpl",
        "methodInfos":[
            {
   
   
                "methodName":"getDiffCode",
                "parameters":"DiffMethodParams diffMethodParams"
            }
        ],
        "type":"MODIFY"
    },
    {
   
   
        "classFile":"com/dr/common/utils/string/ScmStringUtil",
        "methodInfos":[

        ],
        "type":"ADD"
    }
]

由于对象格式的通用性,可以配合 差异代码获取 一起使用

#近期github不稳定,请访问https://gitee.com/Dray/jacoco.git

5、关于生成多模块工程中jacoco报告命令参考 demo,其中diffcode传递的参数为diffcode服务返回的uniqueData字段,已进行转义和压缩直接使用 :
java -jar org.jacoco.cli-0.8.7-SNAPSHOT-nodeps.jar    report jacoco.exec 
--classfiles \Desktop\feigin\web\build\classes   
--classfiles \Desktop\feigin\biz\build\classes   
--classfiles \Desktop\feigin\base\build\classes 
--sourcefiles \Desktop\feigin\web\src\main\java  
--sourcefiles \Desktop\feigin\biz\src\main\java   
--sourcefiles \Desktop\feigin\base\src\main\java --html report --xml jacoco.xml   
--diffCode=[{
   
   
      "classFile": "com/vx/crm/web/swagger/SwaggerConfig",
      "methodInfos": [
        {
   
   
          "methodName": "apiInfo",
          "parameters": ""
        }
      ],
      "type": "MODIFY"
    }]    
--encoding=utf8

ant文件

1、projectBuild.xml
<?xml version="1.0"  encoding="GB2312"?>
<project name="Jacoco" xmlns:jacoco="antlib:org.jacoco.ant" default="jacoco">
    <tstamp prefix="deploy.">
        <format property="tstamp" pattern="yyyyMMdd"/>
    </tstamp>
    <!--Jacoco的安装路径-->
    &l
<think>好的,我现在需要帮助用户解决在IntelliJ IDEA中配置JaCoCo进行代码覆盖率分析的问题。首先,我得回想一下JaCoCo的基本知识以及它在IDEA中的配置步骤。 首先,JaCoCo是一个Java代码覆盖率工具,通常与构建工具如Maven或Gradle一起使用。用户可能已经有一个项目,需要配置JaCoCo来生成覆盖率报告。不过用户的问题是在IntelliJ IDEA中配置,所以可能需要利用IDEA内置的支持,或者通过构建工具集成。 我记得IntelliJ IDEA本身自带了代码覆盖率运行的功能,支持JaCoCo。用户可能不需要手动配置JaCoCo插件,而是可以直接在运行测试时启用覆盖率。例如,右键点击测试类,选择“Run with Coverage”。但用户可能想更详细地配置,比如指定排除的类、生成报告的位置等,这时候可能需要通过构建工具配置,并在IDEA中集成。 接下来,我需要检查用户提供的引用内容,看看是否有相关信息。引用[2]提到了在evosuite.properties中设置类路径,这可能与配置依赖项有关,但不确定是否直接相关。引用[4]提到Java EE应用开发流程,可能涉及到测试和覆盖率。但其他引用似乎不相关。 可能的步骤包括:1. 在Maven或Gradle中添加JaCoCo插件;2. 在IDEA中启用JaCoCo作为覆盖率运行器;3. 运行测试并查看覆盖率报告;4. 配置排除项或报告格式。 需要注意的是,如果用户使用Maven,应该在pom.xml中添加JaCoCo插件,并配置execution目标。然后,在IDEA中运行Maven目标,生成报告。或者,直接在IDEA中使用运行配置的覆盖率选项。 另外,用户可能遇到常见问题,比如覆盖率报告未生成、排除的类未生效等,需要提供解决方案。例如,检查插件配置是否正确,路径是否正确,或者是否需要重新加载项目。 还需要考虑是否需要生成HTML报告,或者导出结果。此外,JaCoCo与IDE的集成可能需要在运行配置中选择JaCoCo作为代理。 现在,整理这些思路,分步骤详细说明,确保用户能跟随操作。同时,生成相关问题,帮助用户深入理解。</think>### 如何在 IntelliJ IDEA 中配置 JaCoCo 进行代码覆盖率分析 以下是分步配置 JaCoCo 的详细流程: --- #### **步骤 1:通过构建工具集成 JaCoCo** - **Maven 项目**: 在 `pom.xml` 中添加 JaCoCo 插件配置: ```xml <build> <plugins> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.8</version> <executions> <execution> <goals> <goal>prepare-agent</goal> </goals> </execution> <execution> <id>generate-report</id> <phase>test</phase> <goals> <goal>report</goal> </goals> </execution> </executions> </plugin> </plugins> </build> ``` 运行 `mvn test` 后,覆盖率报告会生成在 `target/site/jacoco` 目录下[^4]。 - **Gradle 项目**: 在 `build.gradle` 中启用 JaCoCo: ```groovy plugins { id 'jacoco' } jacoco { toolVersion = "0.8.8" } ``` --- #### **步骤 2:在 IntelliJ IDEA 中启用覆盖率分析** 1. 打开测试类或测试方法,右键选择 **Run 'Test' with Coverage**。 2. 首次运行时会提示选择覆盖率工具,选择 **JaCoCo**。 3. 运行完成后,IDE 会自动弹出覆盖率窗口,显示代码行、分支、方法的覆盖率数据。 --- #### **步骤 3:自定义配置(可选)** - **排除特定类/包**(Maven 示例): ```xml <configuration> <excludes> <exclude>**/generated/**/*</exclude> </excludes> </configuration> ``` - **生成 HTML 报告**: 在 Maven 的 `report` 目标执行后,打开 `target/site/jacoco/index.html` 查看详细报告。 --- #### **步骤 4:查看与导出报告** - **IDE 内查看**: 通过 **Run → Show Code Coverage Data** 加载已有覆盖率数据。 - **导出报告**: 在覆盖率窗口中点击 **Export**,支持导出为 HTML、XML 或 CSV 格式。 --- #### **常见问题解决** 1. **覆盖率数据未生成** - 检查构建工具插件配置是否正确。 - 确保测试用例已执行。 2. **IDE 未显示覆盖率窗口** - 重新运行测试并选择 **Run with Coverage**。 - 检查 IntelliJ IDEA 版本是否支持 JaCoCo(2020.3 及以上版本兼容性最佳)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值