在Tomcat上使用JaCoCo Java代理获取我的应用程序的代码覆盖率

时间:2011-07-28 09:24:54

标签: java tomcat sonarqube jacoco

我想使用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文件,但不会填充任何数据。

我的服务器配置中是否有遗漏的内容?

问候。

3 个答案:

答案 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