2008-12-17 56 views
7

對不起,我的問題很愚蠢,但我無法回答它,因爲java文盲。我運行CentOS5一個Tomcat(5)(對於CAS服務器),當我嘗試打開這個網址http://192.168.1.17:8080/cas-server-webapp-3.3.1/login我得到這個錯誤:org.springframework.webflow.util.RandomGuid上的錯誤java.lang.NoClassDefFoundError

第一個錯誤: java.lang.NoClassDefFoundError:無法初始化類組織.springframework.webflow.util.RandomGuid

和根錯誤: org.springframework.web.util.NestedServletException:處理程序處理失敗;嵌套異常是java.lang.NoClassDefFoundError:無法初始化類org.springframework.webflow.util.RandomGuid

$ CLASSPATH是空的,它似乎是一個問題,但我不知道該如何放置它。

編輯:賈裏德是正確的,我的主機文件定義爲127.0.0.1 localhost,現在它工作得很好!

回答

25

它保持兩個或三個不同的異常兩岸在我們這種情況下,頭是很重要的:

  1. java.lang.ClassNotFoundException此異常指示類不是在類路徑中。這表明我們正在嘗試加載類定義,並且該類不存在於類路徑中。

  2. java.lang.NoClassDefFoundError此異常指示JVM看着它的內部類定義的數據結構類的定義,並沒有發現它。這與說不能從類路徑加載不同。通常這表明我們以前試圖從類路徑加載一個類,但由於某種原因它失敗了 - 現在我們再次嘗試,但是我們甚至不會嘗試加載它,因爲我們之前加載它失敗。較早的失敗可能是一個ClassNotFoundException或一個ExceptionInInitializerError(表示靜態初始化塊失敗)或任何其他問題。重點是,NoClassDefFoundError不一定是類路徑問題。

這就是說,另一個答案海報表明RandomGUID需要調用InetAddress.getLocalHost()。在許多操作系統,這將觸發將使用主機文件中的主機查找(在Windows系統上/etc/hosts的* NIX系統,%WINDOWS%/system32/drivers/etc/HOSTS

我見過類似的錯誤相當頻繁時,該文件不正確地定義了本地主機地址。 127.0.0.1應該指向的「localhost」(可能也localhost.localdomain)。它應該點到機器的實際主機名(儘管因爲某些原因,許多老RedHat Linux上安裝喜歡正確設置它。)

1

現在,不應該使用環境變量$ CLASSPATH;相反,java應用程序應該在命令行上設置類路徑。

但是,對於webapps中使用的tomcat和庫,只需將JAR(for Spring)放入tomcat安裝的shared/lib /文件夾。

1

NoClassDef:在編譯當前正在執行的類時存在搜索到的類定義,但無法再找到該定義。因爲你錯過了一個spring類,我猜你錯過了一個spring jar文件。

在tomcat中有兩個地方放置jar,全局區域(在5中是common/lib,在tomcat6中有點不同)以及僅用於webapp的區域,即webapps/mywebapp/WEB-INF/lib目錄下。你的應用程序的罐子應該真的在這裏,但如果你真的困惑,並無法找到任何其他方式使其工作,他們將在全球工作(如果你只有一些在全球範圍內它可能因爲他們可能需要另一個jar包中的一個類,如果一個塊在本地,它將無法工作,這對春天的圖書館尤其如此,因爲有許多單獨的jar,而不僅僅是一個)。

您的CLASSPATH是jvm尋找類的無處不在的列表。這可能包括類文件的目錄,或類或目錄中列出的類的jar或zip文件。 Tomcat應該正確地使用上面提到的目錄爲你加載。

1

原因是未能加載類RandomGUID。

從看RandomGUID source,其靜態初始值設定項在InetAddress.getLocalHost()失敗的機會大多數。

你在主機上有一些奇怪的網絡配置嗎?例如,/ etc/hosts中沒有或者很怪異的localhost定義?

+0

如果靜態初始化器失敗,JVM將拋出ExceptionInInitializerError,而不是NoClassDefFoundError。 – 2008-12-17 19:14:46

+0

不,不是。我已經看到1000次,當靜態類初始化器失敗時,如何拋出「java.lang.NoClassDefFoundError:無法初始化類」。但是,它可能只是我:-) – 2008-12-17 22:34:19

0

如果這對你正在構建的東西突然而異地嘗試,請嘗試重命名並重命名在錯誤日誌中引用的類。這幫助我在Netbeans幾次。

相關問題