jacoco-maven-plugin使用

jacoco-maven-plugin 是用于分析 Java 代码覆盖率的工具,它可以集成到 Maven 构建生命周期中,为单元测试、集成测试生成详细的覆盖率报告。以下是全面的讲解,涵盖主要功能的详细用法、示例代码、常见的使用技巧和一些高阶功能。


主要功能及详细使用

  1. 准备覆盖率数据:prepare-agent
    通过 prepare-agent 目标,Jacoco 插件会在 JVM 中注入一个代理,以便在测试期间收集覆盖率数据。它是必须的步骤,用于在后续生成覆盖率报告。

    配置示例:

    <plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.10</version><executions><execution><id>prepare-agent</id><goals><goal>prepare-agent</goal></goals></execution></executions>
    </plugin>
    
    • 作用:确保 JVM 在运行测试时记录覆盖率数据。
    • 结果:生成 .exec 文件,存储了覆盖率信息,默认路径为 target/jacoco.exec
  2. 生成覆盖率报告:report
    report 目标会使用 prepare-agent 生成的 .exec 文件,结合源码和编译后的字节码,生成详细的覆盖率报告,支持多种格式(HTML、XML、CSV)。

    配置示例:

    <plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.10</version><executions><execution><id>report</id><goals><goal>report</goal></goals><configuration><outputDirectory>${project.build.directory}/jacoco</outputDirectory><formats><format>HTML</format><format>XML</format></formats></configuration><phase>verify</phase></execution></executions>
    </plugin>
    
    • 作用:生成测试覆盖率的可视化报告。
    • 结果:在 target/site/jacoco 目录下生成 HTML 报告(index.html)及 XML 报告。
    • 常用格式
      • HTML:用于人类阅读的报告,包含图表和详细的覆盖率信息。
      • XML:可以用于集成工具(如 SonarQube)。
      • CSV:提供原始的覆盖率数据,用于自定义分析。
  3. 合并多模块的覆盖率报告:report-aggregate
    对于多模块项目,Jacoco 提供了 report-aggregate 目标,用于将多个模块的覆盖率数据合并生成一份报告。

    配置示例:

    在父 pom.xml 中添加 jacoco-maven-plugin 的配置:

    <build><plugins><plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.10</version><executions><execution><id>report-aggregate</id><goals><goal>report-aggregate</goal></goals></execution></executions></plugin></plugins>
    </build>
    
    • 作用:将子模块的测试覆盖率合并,生成一份聚合报告。
    • 结果:在父项目的 target/site/jacoco-aggregate/ 生成合并后的覆盖率报告。
  4. 设置覆盖率阈值:check
    check 目标可以设定代码覆盖率的阈值,如果不满足要求,构建会失败。这对于确保代码质量非常有用。

    配置示例:

    <plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.10</version><executions><execution><id>check</id><goals><goal>check</goal></goals><configuration><rules><rule><element>BUNDLE</element><limits><limit><counter>LINE</counter><value>COVEREDRATIO</value><minimum>0.80</minimum> <!-- 最低要求 80% --></limit></limits></rule></rules></configuration></execution></executions>
    </plugin>
    
    • 作用:定义测试覆盖率的最低阈值标准。
    • 结果:当代码覆盖率低于 80% 时,构建失败。

详细使用流程

  1. 添加插件到 pom.xml
    根据需求,配置 prepare-agentreport 目标。

  2. 运行测试
    运行命令 mvn clean verify,Maven 会在运行测试时自动启动 Jacoco 代理并生成覆盖率数据。

  3. 查看报告
    target/site/jacoco/ 下查看生成的报告。可以直接打开 HTML 文件查看详细的覆盖率信息。


使用技巧和高阶功能

1. 跳过测试和报告生成

在某些情况下,你可能希望跳过测试或跳过生成覆盖率报告,可以通过以下方式:

  • 跳过测试:
    mvn clean install -DskipTests
    
  • 跳过 Jacoco 覆盖率报告:
    mvn clean install -Djacoco.skip=true
    

2. 生成不同格式的报告

根据需求生成不同格式的报告,可以同时配置多个格式,常见格式包括 HTML, XML, 和 CSV。例如:

<formats><format>HTML</format><format>XML</format>
</formats>
  • HTML:适合人类阅读,包含图表和详细信息。
  • XML:用于与 SonarQube 集成进行进一步代码分析。
  • CSV:可以将数据导入到自定义的分析工具中。

3. 多模块项目中的覆盖率合并

如果项目是多模块结构,可以使用 report-aggregate 目标合并各模块的覆盖率数据。确保父 pom.xml 中配置了该插件,并在子模块中收集到 .exec 文件。

4. 集成到 CI/CD 流程

在 Jenkins、GitLab CI 等 CI/CD 工具中,jacoco-maven-plugin 可用于自动化代码覆盖率报告生成并进行质量门槛检查。例如,在 Jenkins Pipeline 中:

stage('Test') {steps {sh 'mvn clean verify'}
}stage('Jacoco Report') {steps {jacoco execPattern: '**/target/jacoco.exec'}
}

5. 排除特定包或类

如果有某些类或包不需要参与覆盖率分析,可以通过 excludes 来排除它们。例如:

<configuration><excludes><exclude>com/example/legacy/**</exclude></excludes>
</configuration>
  • 作用:跳过对某些类或包的覆盖率统计,常用于第三方库或遗留代码。

总结

  1. 基本功能jacoco-maven-plugin 提供了 prepare-agentreport 两个核心目标,分别用于准备覆盖率数据和生成报告。
  2. 合并报告:多模块项目可以使用 report-aggregate 目标将多个模块的覆盖率数据合并。
  3. 覆盖率检查:通过 check 目标,可以设定覆盖率的最低要求,确保代码质量。
  4. 高级功能:可以与 CI/CD 工具集成、排除特定类、生成多种格式的报告等。

常用命令总结

  • mvn clean verify:运行测试并生成覆盖率报告。
  • mvn clean install -Djacoco.skip=true:跳过生成覆盖率报告。

通过这些配置和使用技巧,你可以轻松集成 Jacoco 并根据项目需求调整配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/145337.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

拥塞控制算法的 rtt 公平性

我强调过&#xff0c;拥塞控制的核心在公平可用性&#xff0c;公平性由 buffer 动力学保证&#xff0c;而 buffer 动力学有两种表现形式&#xff1a; buffer 占比决定带宽占比&#xff0c;以 aimd 为例&#xff1b;带宽越小&#xff0c;buffer 挤兑加速比越大&#xff0c;以 b…

AI Agent的20个趋势洞察

结论整理自【QuestMobile2024 AI智能体应用洞察半年报】&#xff1a; AI原生应用&#xff08;APP)一路高歌&#xff1b;豆包用户突破3000万&#xff1b;TOP10 APP以综合类应用为主。无论何种类型的AIGC APP都以智能体为“抓手”&#xff0c;专注于解决各种细分场景中的问题&am…

Opencv+Cuda编译的保姆级别教程

OpencvCuda编译的保姆级别教程 一、环境总览二、环境准备2.1 opencv和opencv扩展2.2 cuda环境下载2.2.1 首先电脑要有英伟达的显卡2.2.2 然后查看显卡驱动版本2.2.3 下载Cuda Toolkit工具包2.2.4 下载Cudnn库 2.3 CMake下载 三、CMake配置步骤3.1 加载路径第一次Configure3.1.1…

influxdb-winsdows电脑用户切换 Unauthorized

如果切换winsdows电脑用户之后启动influxdb出现Unauthorized 1.考虑windows用户的权限问题&#xff0c;给full control 2.要把原来用户下的.influxdb中的sqlite给搬到新用户下&#xff0c;因为里面存了数据库的token&#xff0c;需要认证

C++入门基础知识77(实例)——实例 2【标准输入输出】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C 实例 【标准输入输出】相关内容&#…

React学习day08-useReducer、useMemo、memo、useCallback、forwardRef、useInperativeHandle

15、useReducer 1&#xff09;作用&#xff1a;用来管理相对复杂的状态数据&#xff0c;类似于useState 2&#xff09;使用步骤&#xff08;传递一般的参数&#xff09;&#xff08;在APP.js中&#xff09;&#xff1a; ①定义一个reducer函数&#xff0c;在函数中通过switc…

技术美术百人计划 | 《4.4 抗锯齿》笔记

前言&#xff1a;文中补充的内容很多来自链接里的&#xff0c;建议看看链接的文章。 一、锯齿 (一) 什么是锯齿 在学习渲染的旅途中&#xff0c;你可能会时不时遇到模型边缘有锯齿的情况。这些锯齿边缘(Jagged Edges)的产生和光栅器将顶点数据转化为片段的方式有关。在下面的…

Mobile net V系列详解 理论+实战(1)

Mobilenet 系列 论文精讲部分0.摘要1. 引文2. 引文3. MobileNet 模型架构3.0 卷积个人理解3.1 深度可分离卷积3.2 网络结构和训练3.3 宽度乘数&#xff1a;更细的模型 α3.4 分辨率乘数&#xff1a;降低表示的维度ρ 4. 实验4.1 模型选择4.2. 模型缩减超参数4.3. 细粒度识别4.4…

人力资源数据集分析(二)_随机森林与逻辑回归

数据入口&#xff1a;人力资源分析数据集 - Heywhale.com 数据说明 字段说明EmpID唯一的员工IDAge年龄AgeGroup年龄组Attrition是否离职BusinessTravel出差&#xff1a;很少、频繁、不出差DailyRate日薪Department任职部门&#xff1a;研发部门、销售部门、人力资源部门Dista…

Linux 进程3

进程地址空间 CPU读取数据都需要地址&#xff0c;在计算机中所有东西都是一种数据&#xff0c;包括我们的进程。 这是一个进程空间示意图&#xff0c;操作系统通过task_struct结构体链表来管理每一个进程&#xff0c;结构体里面有一个指针指向操作系统为进程开辟的一段空间&am…

2-100 基于matlab的水果识别

基于matlab的水果识别。从面积特征、似圆形特征&#xff0c;颜色(rgb值和hsv值)特征对图像中的梨子、苹果、桃子、香蕉和菠萝进行特征提取&#xff0c;边缘检测识别&#xff0c;最后按照筛选出来的特征对水果进行识别。程序已调通&#xff0c;可直接运行。 下载源程序请点链接…

【CustomPainter】渐变圆环

说明 实现一个渐变圆环&#xff0c;起点位置为- π / 2。 效果 源码 GradientCircularPainter1 class GradientCircularPainter1 extends CustomPainter {final double progress;GradientCircularPainter1(this.progress);overridevoid paint(Canvas canvas, Size size) {c…

VCNet论文阅读笔记

VCNet论文阅读笔记 0、基本信息 信息细节英文题目VCNet and Functional Targeted Regularization For Learning Causal Effects of Continuous Treatments翻译VCNet和功能目标正则化用于学习连续处理的因果效应单位芝加哥大学年份2021论文链接[2103.07861] VCNet和功能定向正…

OpenCV特征检测(5)检测图像中的角点函数cornerMinEigenVal()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算用于角点检测的梯度矩阵的最小特征值。 该函数类似于 cornerEigenValsAndVecs&#xff0c;但它计算并存储协方差矩阵导数的最小特征值&…

2024上海工博会,正运动激光振镜运动控制器应用预览(二)

■展会名称&#xff1a; 第二十四届中国国际工业博览会&#xff08;以下简称“上海工博会”&#xff09; ■展会日期 2024年9月24日–28日 ■展馆地点 中国国家会展中心&#xff08;上海&#xff09; ■展位号 6.1H-E261 正运动激光加工控制解决方案主要分为激光振镜运动…

24 小时不关机的挂机云电脑,还能这么玩?

云电脑技术为我们提供了无限可能。特别是对于游戏爱好者&#xff0c;挂机云电脑不仅解决了传统电脑的局限性&#xff0c;还带来了更为便利的游戏体验。除此之外云电脑还有什么其他玩法呢&#xff1f; 01 挂机云电脑的优势 首先要知道&#xff0c;什么是挂机云电脑&#xff1f…

解锁自动化新境界:KeymouseGo,让键盘和鼠标动起来!

文章目录 解锁自动化新境界&#xff1a;KeymouseGo&#xff0c;让键盘和鼠标动起来&#xff01;背景&#xff1a;为何选择KeymouseGo&#xff1f;KeymouseGo简介安装KeymouseGo简单函数使用应用场景常见问题与解决方案总结 解锁自动化新境界&#xff1a;KeymouseGo&#xff0c;…

操作系统 | 学习笔记 | | 王道 | 5.1 I/O管理概述

5.1 I/O管理概述 5.1.1 I/O设备 注&#xff1a;块设备可以寻址&#xff0c;但是字符设备是不可寻址的 I/O设备是将数据输入到计算机中&#xff0c;或者可以接收计算机输出数据的外部设备&#xff0c;属于计算机中的硬件部件&#xff1b; 设备的分类 按使用特性分类&#xff…

from tqdm.auto import tqdm用法详细介绍

tqdm 是一个 Python 库&#xff0c;用于在长时间运行的任务中显示进度条。tqdm.auto 是 tqdm 的一个版本&#xff0c;能够自动适配输出环境&#xff08;如 Jupyter Notebook、命令行等&#xff09;&#xff0c;以确保进度条在各种环境下显示正确。下面是 tqdm.auto 的详细用法介…

英飞凌 PSoC6 评估板 RT-Thread 开发环境搭建

本文介绍如何搭建基于 RT-Thread Studio IDE 工具的 PSoC6 RTT 评估板的开发环境&#xff0c;通过搭建一个简单的工程&#xff0c;将代码编译、下载到 PSoC6 RTT 开发板。 安装软件包 首先需要安装 RT-Thread Studio&#xff0c;如果你还没安装&#xff0c;可以点击这里下载安…