我想使用JaCoCo和Sonar工具来衡量集成测试的代码覆盖率。
为此,我启动了使用JaCoCo代理配置的Tomcat 5.5,以便从JaCoCo获取转储文件。
因此,我为此设置JAVA_OPTS
:
set JAVA_OPTS=-Xrs -XX:MaxPermSize=256m -XX:PermSize=256m -XX:NewRatio=3 -Xms512m -Xmx1024m -XX:+UseParallelGC -javaagent:C:\dev\servers\jacoco-agent.jar=destfile=C:\dev\servers\jacoco.exec,append=true,includes=my.application.*
当我启动Tomcat时,会生成C:\dev\servers\jacoco.exec
文件,但不会填充任何数据。
我的服务器配置中是否有遗漏的内容?
问候。
答案 0 :(得分:10)
我意识到这可能不是两年前提出这个问题时的一个选项,但是目前你有一些其他选项可以获取JaCoCo执行数据而无需关闭Tomcat(或任何使用JaCoCo java代理程序的JVM)
首先看一下JaCoCo Java Agent的当前文档:http://www.eclemma.org/jacoco/trunk/doc/agent.html
您可以使用JaCoCo代理上的 output = tcpserver 选项让Java代理侦听命令。你可以设置 address = *让tcpserver监听所有接口,你可以设置 port = 6300 参数来选择tcpserver应该监听的端口。
通过tcpserver,可以指示JaCoCo java代理在您要求时向您发送数据。
如果您的JVM当前正在公开JMX,您可以使用另一个选项,无需打开其他端口即可使用。通过设置 jmx = true 选项,JaCoCo java代理公开了一个可以与之交互的MBean。
如果您正在使用maven,您可以查看我最近编写的插件,以便在运行时从远程JVM收集JaCoCo数据。该插件的项目位于:
https://github.com/mattcj/jacocotogo
答案 1 :(得分:7)
据我记忆 - 在关闭Tomcat期间会填充文件。
答案 2 :(得分:3)
除了maven解决方案之外,您还可以考虑使用https://www.eclemma.org/jacoco/trunk/doc/cli.html
基本上,您可以使用如下的javaagent选项在远程计算机上启动服务(如果您希望覆盖所有类,则可以更改端口号并忽略包括):
-javaagent:/tmp/jacocoagent.jar=port=36320,destfile=jacoco-it.exec,output=tcpserver,includes=a.b.c.d.*”
然后通过提供远程主机地址连接到远程计算机,或打开到远程计算机的隧道。以下示例假定我已经在本地主机36320和远程主机36320之间设置了端口转发。
java -jar jacococli.jar dump --port 36320 --destfile /tmp/jacoco-it.exec
如果您有多个.exec文件,则需要将它们合并:
java -jar jacococli.jar merge /tmp/jacoco-it-1.exec /tmp/jacoco-it-2.exec --destfile /tmp/merge
然后生成html报告(path1可以是jar文件或类文件文件夹的路径)
java -jar jacococli.jar report /tmp/jacoco-it.exec --classfiles path1 --sourcefiles path2 --html /tmp/report