我将使用JaCoCo代理将应用程序部署到生产环境,让它工作一段时间。结果应该可以帮助我识别出我可以摆脱的代码部分。
我开始围绕这个主题进行一些研究并准备好HelloWorld应用程序:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello world");
}
}
然后我编译了类:“javac HelloWorld.java”并获得了HelloWorld.class文件。
现在我使用以下命令运行应用程序:程序执行“java -javaagent:jacocoagent.jar HelloWorld”并生成jacoco二进制文件。该文件包含一些二进制数据。
一切看起来都不错,但覆盖率报告显示0%的覆盖率,尽管它应该是100%。
有没有人遇到过这个问题或者纠正我的错误方法?
答案 0 :(得分:1)
我使用此步骤生成完整报告。因为我使用maven进行这种操作,所以我在你的步骤之后添加了maven。我创建了HelloWorld.java,只是从你的问题中复制。然后我按照以下步骤操作:
输出javac HelloWorld.java
的 HelloWorld.class
然后我通过执行jacoco.exec
java -javaagent:jacocoagent.jar HelloWorld
然后我创建了一个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版本必须匹配。
这是我得到的结果。