2011-03-31 25 views
5

我的问题是我有一个Web应用程序构建并部署为JBoss 6的WAR文件。我的servlet无法在我的应用程序中加载类并抛出NoClassDefFoundError错误。NoClassDefFoundError当类在JBoss 6中WAR-WEB-INF/classes文件夹

我确认这个类存在于WAR文件的正确位置。我的所有应用程序类都存在于WEB-INF/classes文件夹中,以及我的servlet类,它可以顺利执行。事实上,看起来这只是一个不在classpath中的类,因为应用程序的其他方面运行良好。

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

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

我不希望任何人立即知道什么是错误的,如果有人看到类似的事情发生之前,那么请分享你的经验,或者如果你有很好的提示或知道好的工具,以真正深入到classpath问题,然后请分享。

+0

它抱怨什么类?更可能的是,JBoss已经在它的系统/共享罐中提供了这个类,并且它与战争中的类相冲突。我没有解决方案,只有我对解决JBoss类加载和隔离问题的同情不是很有趣或很容易。 – 2011-03-31 18:50:46

+0

这是我的班。 JBoss不会打包它,除非他们偷偷溜进我的办公室偷走它,而我正在抓咖啡:) – 2011-03-31 18:56:54

回答

7

NoClassDefFoundError表示该类已“加载”但类定义无法建立。它通常发生在类的静态初始化中存在异常时。 我已经多次在AppServers中看到静态初始化期间的异常未在日志文件中报告。

检查静态块并初始化失败的可能导致异常的类的静态属性。

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

希望这有助于

+0

你当然给了我一些想法。好的提示!我会调查并通知您是否解决了我的问题。 – 2011-03-31 19:05:21

+0

太棒了!你关于检查静态初始化器是正确的,有一个属性文件被错误地引用,并且引发了NPE。我永远不会认为JBoss会欺骗性地记录类的静态初始化期间发生的异常。 – 2011-03-31 19:54:05

+0

谢谢!我认为NoClassDefFoundError意味着该类没有加载。这让人大开眼界。 – anton1980 2012-10-15 21:01:41

相关问题