我正在使用最新的Cobertura 2.0 jar,并完成了https://stackoverflow.com/a/5319237/870392中定义的设置。
当我尝试关闭tomcat(版本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来解决这个问题?
更新
在进一步的试验和错误中,它看起来与关机挂钩有关。而不是WEB-INF/lib
我将cobertura.jar
移动到tomcat7/lib
,这意味着jar现在可用到tomcat关闭期间的稍后时间点。结果以前的Cobertura NoClassDef错误消失了,但是我的应用程序中的类得到NoClassDef错误(可能是因为cobertura开始尝试为每个类编写覆盖数据)。 cobertura线程崩溃,ser文件未更新。