如何使用 JaCoCo 代理检查代码覆盖率?

How to check code coverage with JaCoCo agent?

我打算将带有 JaCoCo 代理的应用程序部署到生产环境中,让它运行一段时间。结果应该可以帮助我确定可以删除的代码部分。

我围绕该主题开始了一些研究并准备了 HelloWorld 应用程序:

public class HelloWorld {

    public static void main(String[] args) {
        System.out.println("Hello world");
    }
}

然后我编译了 class: "javac HelloWorld.java" 并得到了 HelloWorld.class 文件。

现在我 运行 使用以下命令的应用程序: "java -javaagent:jacocoagent.jar HelloWorld" 程序执行并生成 jacoco 二进制文件。该文件包含一些二进制数据。

一切看起来都很好,但覆盖率报告显示覆盖率为 0%,尽管它应该是 100%。

有没有人遇到过这个问题或纠正我做错的事情?

我使用此步骤生成了完整报告。由于我使用 maven 进行此类操作,因此我在您的步骤之后添加了 maven。我创建 HelloWorld.java 只是从您的问题中复制。然后我按照以下步骤操作:

javac HelloWorld.java 输出 HelloWorld.class 然后我通过执行 java -javaagent:jacocoagent.jar HelloWorld

创建了 jacoco.exec

然后我创建了一个pom.xml文件,内容是这样的。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>test</groupId>
    <artifactId>test</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <name>test</name>


    <build>
        <plugins>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.7.5.201505241946</version>
            </plugin>
        </plugins>
    </build>

之后我创建了一个 target/classes 目录。我将 jacoco.exec 复制到 target/,将 HelloWorld.class 复制到 target/classes

然后我执行了 mvn jacoco:report,生成了一份报告给 target/site/jacoco。其中包含正确的覆盖信息。

我知道使用 maven 可能不太适合简单的应用程序。但我不知道从 jacoco.exec 生成报告的任何其他方法。顺便说一句,你的maven插件版本和jacocoagent版本必须匹配。

这是我得到的结果。