【问题标题】:Cobertura NoClassDefFoundError error during Tomcat7 shutdownTomcat7关闭期间出现Cobertura NoClassDefFoundError错误
【发布时间】: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

一些额外的观察

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

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

  3. 对于早期的 cobertura 版本,有一个与此相关的错误参考 3 March 2010, 1.9.4.1

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

更新:

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

【问题讨论】:

标签: tomcat cobertura


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 2015-02-18
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    相关资源
    最近更新 更多