JaCoCo手册

JaCoCo 简介

JaCoCo should provide the standard technology for code coverage analysis in Java VM based environments. The focus is providing a lightweight, flexible and well documented library for integration with various build and development tools.

JaCoCo 要为基于 Java VM 的环境中的代码提供覆盖率分析标准技术,重点是提供一个轻量、灵活且文档齐全的库,以便与各种构建和开发工具集成。

功能特性

  • 指令(C0)、分支(C1)、行、方法、类型、圈复杂度的覆盖率分析;
  • 基于 Java 字节码,即使没有源码依然可以运行;
  • 支持 on-the-fly 模式,可以通过 javaagent 便捷地集成,也可以通过 API 来自定义类装载器进行集成;
  • 与框架无关,可以对基于 Java VM 的应用程序顺利的集成;
  • 与已所有已发布的 Java 版本兼容;
  • 支持不同的 JVM 语言;
  • 可以生成多种格式的报告(HTML、XML、CSV);
  • 支持远程协议和 JMX 控制,可以在任何时间点来进行覆盖率数据的存储;

使用

下载完 JaCoCo 之后会得到几个 jar 包,其中 jacocoagent.jar 和 jacococli.jar 是我们比较关注的。

  • jacocoagent.jar 是 JVM 应用程序启动时的代理
  • jacococli.jar 是生成覆盖率报告、合并 dump 文件的命令行工具

jacocoagent

Java Agent 的原理可以阅读 java.lang.instrument.Instrumentation 这个类,这里先介绍 jacocoagent 的使用方法。

在 Java 应用的启动命令上加入如下的参数:

-javaagent:[yourpath/]jacocoagent.jar=[option1]=[value1],[option2]=[value2]

即可对启动的 Java 应用程序中指定的类进行代码覆盖率的采集,其中 option 的选项有:

option 缺省值 描述
destfile jacoco.exec 保存 jacoco 采集的数据文件的路径
append true 数据文件保存路径的文件存在的情况下,是否追加覆盖率数据
includes * 采集哪些类(采集类过多会导致新能下降严重)
excludes * 排除哪些类
inclbootstrapclasses false 是否需要采集 bootstrap classLoader 加载的类
inclnolocationclasses false 是否需要采集没有原位置的类(即程序运行时生成的类)
sessionid auto-generated 会话标识符,如果没有配置该参数,jacocoagent 会自动生成
dumponexit true 是否在 VM 关闭时写入数据
output file 存储数据的方式,有效的选项:file、tcpserver、tcpclient、none
address loopback interface 当 output 为 tcpserver 时启用,缺省值为 127.0.0.1
port 6300 当 output 为 tcpserver 时启用
classdumpdir no dumps 保存插桩之后的 class 的路径
jmx false 是否开启 JMX 功能

jacococli

jacoco 的命令行工具,可以用于链接 jacocoagent 用于采集回文件的存储、对指定的类进行插桩、合并 dump 文件、生成报告等功能,具体使用方法不再一一列举,可以查看官方文档