jacoco 的覆盖率获得有 file tcpserver tcpclient 三种模式。但是公司的服务器是 docker 动态分配的,有空闲的资源就把服务分布过去,所以服务器的 ip 不确定,不能用 tcpserver 和 file 模式。现在考虑用 tcpclient 的形式来获得,个人不太清楚这种模式下要如何拿到 jacoco.exec?是需要自己写一个 server 么?求各位大神不吝赐教啊!
我试了源码的 ExecutionDataServer 启动了 server,不过每次跑出来的结果都是空的。。
没错,这个我试过了,不过一开始 exec 文件一直只有头内容,我把服务器 jvm 停掉后就会触发钩子写进 exec 文件了。不知道是不是 client 这种模式也是要停 jvm 的,还是我哪里做的有问题?
你用域名不就行了? 另外也可以改造下,反向推送出去。
ip 动态没关系,你们有 cmdb 系统么?封装个根据应用取 IP 的接口就行了。
我记得用法是差不多的,只不过你需要先启动一个本地监听的服务器,jacoco 本身有提供,类名是 ExecutionDataServer.java,需要配置远程服务器地址和本地的监听端口。服务器上需要配置启动监听的服务器地址和端口。覆盖率数据会自动上传到你监听服务器设定的路径里,并生成 exec 文件。
tcpserver 设置动态覆盖率收集,手动调用 dump 出 exec 文件,可以不停 jvm。tcpclient 原理应该差不多吧,没试过。
是需要停服务的,不然数据不上传
我也是同样的问题,应用容器化部署了~用的 tcpsever 模式启动后会有两个不同的 pid,导致覆盖率统计都是 0
容器中使用 0.0.0.0 这个 ip 进行绑定。就可以实际获取的容器 node 的 ip
填 0.0.0.0 然后通过实际容器 ip 就可以访问到