2015-09-10 72 views
1

我正在研究关于开展的Cobertura代码覆盖在运行一个Java Web应用程序,我读到一篇文章,http://www.mojohaus.org/cobertura-maven-plugin/instrumentingDeploymentArtifact.html的Cobertura运行时覆盖

我遵循的步骤,并能得到一个小覆盖报告maven web应用程序,我在JBoss服务器上部署了一个war文件(包含单个模块),并手动浏览已部署的应用程序。

现在,当我遵循相同的程序和步骤为更大的应用程序,我们需要在相同的安装程序上部署ear文件(包含多个模块的war文件),然后手动打开应用程序服务,但我无法得到它的任何保险。最初创建一个空的cobertura.ser文件,但它不会被更新。

如果在使用ear/war或其他任何需要在JBoss服务器中配置的问题请让我知道。

预先感谢

回答

1

为的Cobertura一种已知的条件是,它JVM关机期间写入代码覆盖率,即,它注册一个关闭挂钩,和转储信息到在该时刻的文件。 问题是,在大多数关闭钩子可以执行之前,JBoss通常会暂停JVM,并影响Cobertura。 看到这个常见问题:使用

-Djboss.shutdown.forceHalt=false 

现在,另一种常见的解决办法是将CoberturaFlush.war(发行版的一部分)纳入你的EAR I'm using JBoss. When I stop the server, the coverage data file is not written.

的常见问题建议,并调用一个特殊的网址,将使Cobertura运行时将其数据转储到文件中。你想关闭你的服务器/应用程序之前,调用该URL,通常是http://HOST:PORT/coberturaFlush/flushCobertura

最后一两件事:数据文件将默认情况下在工作目录中生成,因此它往往是更安全显式地强制一个文件路径名:

-Dnet.sourceforge.cobertura.datafile=[absolute file path] 

在你的情况下,就必须加入到JBoss的启动参数(如run.conf)

+0

关停JBoss服务器我得到下面的错误。 10:45:58,693 ERROR [stderr](线程-67)线程“Thread-67”中的异常java.lang.IllegalAccessError:尝试访问类net.sourceforge.cobertura.coveragedata.TouchCollector $ netToolCollector $ ApplyToClassDataLightClassmapListener net.sourceforge .cobertura.coveragedata.TouchCollector 我正在使用cobertura-2.1.1.jar – Ayush

+0

您试过两种选择中的哪一种?如果前者,JBoss类卸载可能会阻碍,例如,如果您的cobertura jar包含在EAR中,那么它将被取消部署,并且在关闭挂钩之前卸载类(或同时发生)。 WAR解决方案在这种情况下可能会更好,或者尝试将Cobertura运行时jar放在jboss/server/main/lib /文件夹中。 –

+0

我能够通过将cobertura jar降级到cobertura-2.0.3.jar来删除讨论的错误。 现在,除了我无法收集覆盖率数据外,所有步骤都正常工作。我甚至尝试了-Djboss.shutdown.forceHalt = false以及http:// HOST:PORT/coberturaFlush/flushCobertura,但没有一个步骤成功。 – Ayush