2011-03-31 73 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

相關問題