【发布时间】:2013-06-25 09:52:33
【问题描述】:
我正在使用最新的 Cobertura 2.0 jar,并按照此处https://stackoverflow.com/a/5319237/870392 的定义完成了设置。
当我尝试关闭 tomcat (ver 7) 以收集覆盖数据时执行我的测试用例后,我收到以下错误:
Exception in thread "Thread-2" java.lang.NoClassDefFoundError: net/sourceforge/cobertura/coveragedata/TouchCollector$ApplyToClassDataLightClassmapListener
at net.sourceforge.cobertura.coveragedata.TouchCollector.applyTouchesToSingleClassOnProjectData(TouchCollector.java:70)
at net.sourceforge.cobertura.coveragedata.TouchCollector.applyTouchesOnProjectData(TouchCollector.java:58)
at net.sourceforge.cobertura.coveragedata.ProjectData.saveGlobalProjectData(ProjectData.java:324)
at net.sourceforge.cobertura.coveragedata.SaveTimer.run(SaveTimer.java:34)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.ClassNotFoundException: net.sourceforge.cobertura.coveragedata.TouchCollector$ApplyToClassDataLightClassmapListener
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
... 5 more
一些额外的观察
引用的类存在于 Cobertura jar 文件中。
缺少的类是静态嵌套类cobertura github code
对于早期的 cobertura 版本,有一个与此相关的错误参考 3 March 2010, 1.9.4.1
我可以做任何快速修复,然后从源代码重建 cobertura 来解决这个问题?
更新:
在进一步的试验和错误中,它看起来与关闭挂钩有关。我将cobertura.jar 移动到tomcat7/lib 而不是WEB-INF/lib,这意味着该jar 现在可以在tomcat 关闭期间使用。结果,之前的 Cobertura NoClassDef 错误消失了,但是我的应用程序中的类出现 NoClassDef 错误(大概是因为 cobertura 开始尝试为每个类编写覆盖率数据)。 cobertura 线程崩溃,ser 文件没有更新。
【问题讨论】:
-
您能试试 2.0.1 版,其中包含一些额外的修复。 sourceforge.net/projects/cobertura/files/cobertura/2.0.1.