如何使用 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版本必须匹配。
这是我得到的结果。
我打算将带有 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版本必须匹配。
这是我得到的结果。