2012-10-30 31 views
2

我正在使用Hibernate在我的Google Web Toolkit項目中實現遠程過程調用。當我運行它從Eclipse作爲谷歌的「Web應用程序」,我得到當服務被調用(當我按下網頁上的按鈕)一個NoClassDefFoundError的例外:NoClassDefFoundError:org/hibernate/cfg /配置

Starting Jetty on port 8888 
    [WARN] Exception while dispatching incoming RPC call 
com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract java.lang.String edu.mit.ll.irbenchmark.client.MetricDataTableService.getDataString(edu.mit.ll.irbenchmark.EvaluationMetric)' threw an unexpected exception: java.lang.NoClassDefFoundError: org/hibernate/cfg/Configuration 
    at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:385) 
    at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:588) 
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208) 

但是,當我「GWT編譯」該項目並將目錄「戰爭」的內容複製到tomcat6,它完美的作品!

以下罐子是我的戰爭/ WEB-INF/lib目錄:

antlr-3.4-complete.jar 
commons-collections3-3.2.1.jar 
dom4j.jar 
gwt-servlet.jar 
hibernate-commons-annotations-3.2.0.Final.jar 
hibernate-core-3.6.9.Final.jar 
hibernate-jpa-2.0-api-1.0.1.Final.jar 
IRBenchmarker.jar 
javassist-3.12.0.GA.jar 
jta-1.1.jar 
log4j-1.2-1.2.16.jar 
mysql-connector-java-5.1.16.jar 
slf4j-api-1.6.4.jar 
slf4j-log4j12-1.6.4.jar 
+0

這個問題是否通過谷歌測試? http://stackoverflow.com/questions/9851528/java-lang-noclassdeffounderror-org-hibernate-cfg-configuration –

+0

是的。正如我上面明確列出的那樣,hibernate jars位於war/WEB-INF/lib庫中。 – Clark

回答

1

把庫放到WEB-INF/lib目錄是不夠的Eclipse插件。您還需要將其添加到項目的類路徑中(右鍵單擊該jar,然後選擇「構建路徑」>「添加到構建路徑」)。

+0

我會添加一個新的答案,通常NCDFE是同一個類的實例,可以從兩個不同的地方獲得,因爲CNFE在任何地方都沒有類定義......所以尋找多個可用的Hibernate罐子 –

+0

@jesse:[CNFE](http://docs.oracle.com/javase/6/docs/api/java/lang/ClassNotFoundException.html)被拋出,「當一個應用程序試圖通過它的字符串名稱加載一個類時」。 [NCDFE](http://docs.oracle.com/javase/6/docs/api/java/lang/NoClassDefFoundError.html)如果它加載類「作爲普通方法調用的一部分或作爲創建的一部分一個使用'new'表達式的新實例。 –

+0

hibernate庫位於項目的類路徑中。甚至可以在Package Explorer中的Referenced Libraries下看到類org.hibernate.cfg.Configuration。是否有一種簡單的方法可以告訴我的類路徑中是否存在多個類的定義? – Clark

1

右鍵單擊您的項目並轉到屬性。然後轉到Google-> Web應用程序。確保「此項目有一個WAR目錄」被選中,並且您的戰爭文件夾在複選框下被尋址。現在你已經在那裏了,看看Google-> Web Tooklit並確認「Use Google Web Toolkit」已被選中並且正確的庫被處理,這並不會帶來什麼壞處。

+0

一切看起來不錯。感謝您的建議 – Clark