IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> jacoco整理 -> 正文阅读

[开发工具]jacoco整理

简介

jacoco二开,主要加入了增量代码匹配的功能 具体设计方案参考 jacoco增量代码实践

问题记录

Some classes do not match with execution data.
因为git版本导致个别代码行,内容没有改变,但是解析值判定,会导致jacoco对应的class判定不一致,但是实际代码内容一致。

改造内容:

新增类:所有新增类处于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
3、关于生成多模块工程中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

4、jacoco报告如存在乱码问题: 请执行命令时带入参数 --encoding=utf8

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 21:12:07  更:2022-03-21 21:13:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:59:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码