JBoss中使用Jacoco代码覆盖率统计工具

Jacoco是一个Java代码覆盖率统计工具,见:http://www.eclemma.org/jacoco/
JaCoCo is a free code coverage library for Java, which has been created by the EclEmma team based on the lessons learned from using and integration existing libraries for many years.
今天帮助同事将Jacoco部署到测试环境的JBoss中,以便进行代码覆盖率统计的实验,然后加上了Jacoco作为javaagent后,JBoss就启动不了了,看到的jboss.log中错误信息如下:


一开始,找资料试图解决这个问题,很久都没有解决问题了,网上大都遇到的情况是“-javaagent”这你不应该加上“-D”,但我这里一开始就没有这个问题的。
后来,晚上忽然想想是否可以挪动jacocoagent.jar到jboss的路径$JBOSS_HOME/bin之下,后来试了一下,居然正常了,启动JBoss启动后Java进程的命令如下:

没有认认真真阅读jboss的启动脚本和没有研究jboos的加载Jar的一些基本知识,所以暂时无法解释是何原理。(待了解后补充)
jacocoagent.jar的路径为 /usr/local/jboss/lib/jacocoagent.jar 也是可以的。
后来早上到公司一下就看出问题所在了,我简直弱爆了,原来只是文件读取权限的问题,jboss启动的java进程时用nobody这个用户启动的,它对/root/下的东西没有读取权限的。
一些简单信息如下:

哎,简单的文件读取权限问题,它的报错信息不够直观啊~~

后记:
当使用acoco的client端去远程连接server端时,一直报“connection refused”的错误,后来发现时jacocoagent启动时默认限制了仅有本地地址127.0.0.1才能连接这个server端的端口;需要在JVM启动的avaagent (jacocoagent)时制定address参数。具体现象和修改如下:

master

Stay hungry, stay foolish.

发表评论

电子邮件地址不会被公开。 必填项已用*标注