6

我的问题是我构建了一个 Web 应用程序并将其作为 WAR 文件部署到 JBoss 6。我的 servlet 无法在我的应用程序中加载类并抛出 NoClassDefFoundError。

我确认此类存在于 WAR 文件的正确位置。我所有的应用程序类都存在于 WEB-INF/classes 文件夹中,还有我的 servlet 类可以顺利执行。事实上,似乎只有这一类不在类路径中,因为应用程序的其他方面运行良好。

JBoss 在 JDK 1.6_21 上运行,应用程序是使用 JDK 1.6_24 构建的,这应该不是问题吧?

此外,这个应用程序在 Eclipse 中本地运行良好,当我将 WAR 文件部署到单独的 Tomcat 7 和 Glassfish 3 服务器时,他们都发现这个类没有问题。

我不希望任何人立即知道出了什么问题,如果有人在此之前看到过类似的事情,请分享您的经验,或者如果您有很好的技巧或知道真正深入研究类路径问题的好工具,那么请分享。

4

1 回答 1

8

NoClassDefFoundError表示类已“加载”但无法构建类定义。它通常发生在类的静态初始化出现异常时。我在 AppServers 中不止一次看到日志文件中没有报告静态初始化期间的异常。

检查失败的类的静态块和静态属性的初始化,寻找潜在的异常原因。

我在 JBoss 和 WebSphere 中看到的另一个原因是 Web 应用程序正在分发一些与应用服务器中的库(如 servlet.jar 或其他东西)冲突的库。通常通过删除有问题的库或将类加载机制调整为“父优先”来解决问题。

希望这可以帮助

于 2011-03-31T18:54:10.093 回答