我的问题是我构建了一个 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 服务器时,它们都可以毫无问题地找到此类。
我不希望任何人立即知道哪里出了问题,如果有人之前看到过类似的事情,请分享您的经验,或者如果您有好的技巧或知道真正深入研究类路径问题的好工具,那么请分享。
最佳答案
NoClassDefFoundError
表示类已“加载”但无法构建类定义。通常在类的静态初始化出现异常时发生。
我在 AppServers 中不止一次看到日志文件中没有报告静态初始化期间的异常。
检查失败的类的静态 block 和静态属性的初始化是否有潜在的异常原因。
我在 JBoss 和 WebSphere 中看到的另一个原因是 Web 应用程序正在分发一些与应用程序服务器中的库(如 servlet.jar 或其他东西)冲突的库。通常通过删除有问题的库或将类加载机制调整为“父级优先”来解决问题。
希望对你有帮助
关于java - 当类在 JBoss 6 WAR WEB-INF/classes 文件夹中时出现 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5504709/