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

Rom*_*las 10 java tomcat jacoco sonarqube

我想使用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.*
Run Code Online (Sandbox Code Playgroud)

当我启动Tomcat时,C:\dev\servers\jacoco.exec会生成文件,但不会填充任何数据.

我的服务器配置中有没有忘记的东西?

问候.

Mat*_*ttJ 10

我意识到这可能不是2年前问这个问题时的一个选项,但是目前你还有一些其他选项可以获取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


God*_*din 7

据我记忆 - 在关闭Tomcat期间会填充文件.


小智 7

除了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文件或者class文件文件夹的路径)

java -jar jacococli.jar report /tmp/jacoco-it.exec --classfiles path1 --sourcefiles path2 --html /tmp/report