一、所需依赖:
JDK1.8
apache-ant-1.10.11-bin.zip(使用ant来生成报告)
jacoco-0.8.8-20210723.142902-15.zip。
二、准备
-
新建一个spring boot项目,简单写两个GET请求,执行mvn clean package打包。
-
将build.xml放入ant的bin目录下,其中有几个参数是需要改动的。
三、使用
- 启动spring项目:
java -javaagent:D:\software\jacoco-0.8.8\lib\jacocoagent.jar=includes=*,output=tcpserver,port=6300,address=127.0.0.1 -jar .\target\demo-0.0.1-SNAPSHOT.jar
注意port和address需要和build.xml中指定一致。
启动后,调用几个接口。
-
cmd进入ant的bin目录,执行ant dump:
-
再执行ant report:
-
进入jacoco报告路径查看报告:
四、延伸
有的时候只想统计特定类的覆盖率,需要做一些调整:
-
首先,build.xml中的.class需要指定到具体的路径:
- 然后,启动项目时,include参数需要指定到具体的类:
java -javaagent:D:\software\jacoco-0.8.8\lib\jacocoagent.jar=includes=com.example.demo.Service.TestServiceImp,output=tcpserver,port=6300,address=127.0.0.1 -jar .\target\demo-0.0.1-SNAPSHOT.jar
-
效果如下:
五、踩坑总结:
当组件在服务器,本地生成报告时,服务器启动组件命令时的address不要设置为127.0.0.1,要设置为0.0.0.0,不然声场报告时会连接不到Tomcat服务。
-
ant report时,报错“[jacoco:report] Execution data for class ******** does not match”,如下图:
解决:这是因为本地重新编译后的包中classid与原包的classid不一致,原因是因为两次编译的环境不一致。所以本地编译后要去原包的.jar中拿到.class文件,覆盖到本地target的classes中,就可以了。