Tomcat7关闭期间出现Cobertura NoClassDefFoundError错误

时间:2013-06-25 09:52:34

标签: tomcat cobertura

我正在使用最新的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

一些额外的观察

  1. 引用的类存在于Cobertura jar文件中。

  2. 缺少的类是静态嵌套类cobertura github code

  3. 早期的cobertura发布中有一个与此相关的错误参考3 March 2010, 1.9.4.1

  4. 我可以做什么快速修复,然后从源代码重建cobertura来解决这个问题?

    更新

    在进一步的试验和错误中,它看起来与关机挂钩有关。而不是WEB-INF/lib我将cobertura.jar移动到tomcat7/lib,这意味着jar现在可用到tomcat关闭期间的稍后时间点。结果以前的Cobertura NoClassDef错误消失了,但是我的应用程序中的类得到NoClassDef错误(可能是因为cobertura开始尝试为每个类编写覆盖数据)。 cobertura线程崩溃,ser文件未更新。

1 个答案:

答案 0 :(得分:0)

我认为这是Cobertura的一个问题:

https://github.com/cobertura/cobertura/issues/180