我正在使用最新的 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代码
2010 年 3 月 3 日的早期 cobertura 版本 1.9.4.1 中有一个与此相关的错误参考
我可以做任何快速修复,然后从源代码重建 cobertura 来解决这个问题?
更新:
在进一步的试验和错误中,它看起来与关闭挂钩有关。而不是WEB-INF/lib
我将 jar 移动cobertura.jar
到tomcat7/lib
这意味着 jar 现在可以在 tomcat 关闭期间的稍后时间使用。结果,之前的 Cobertura NoClassDef 错误消失了,但是我的应用程序中的类出现 NoClassDef 错误(大概是因为 cobertura 开始尝试为每个类编写覆盖率数据)。cobertura 线程崩溃,并且 ser 文件未更新。