2014-09-21 25 views
0

我正在將項目導出到在SmartFox中用作服務器擴展的jar,我的項目使用Amazon AWS SDK將某些文件上傳到雲中。問題是,當我運行SmartFox它拋出這個異常:作爲smartfox擴展的AWS SDK中的NoClassDefFoundError

Exception in thread "Thread-22" java.lang.NoClassDefFoundError: com/amazonaws/auth/AWSCredentials at... 
Caused by: java.lang.ClassNotFoundException: com.amazonaws.auth.AWSCredentials 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
... 1 more 

的AWSCredentials類是在classpath中,當我下載了SDK文件,我注意到有一個「第三方」文件夾罐是AWS可能需要,我不確定是否必須將它們添加到類路徑中,所以我做了它,但沒有更改..也是我的項目是一個常規的Java項目,而不是一個Web項目,這可能是問題嗎?如果是這樣的話,我搞砸了,因爲我不允許改變項目類型..感謝您的任何幫助提前...

+0

你可以提供關於你的開發環境的更多細節嗎?你如何將項目建設成一個罐子?建設時是否包含AWS核心罐?我的第一個猜測是,AWS SDK沒有內置到您正在創建的新jar中。我對SmartFox一無所知,但聽起來您可以將該jar創建到您的新jar中,或者在AWS jar中使用SmartFox – 2014-09-23 00:52:11

回答

0

答案很簡單,SmartFox有一個/SmartFoxServer_2X/SFS2X/extensions/__ lib __目錄,你應該在哪裏放置擴展瓶可能需要的所有罐子。

我粘貼了所有「第三方」罐子和SDK jar本身在這個目錄中,它幾乎工作。之後我遇到的問題是來自同一個庫(來自apache的http-client)的兩個罐子之間的不兼容問題,一個存在於__ lib __,另一個存在於/SmartFoxServer_2X/SFS2X/lib,其中包含SmartFox使用的所有罐子。

我認爲問題在於SmartFox類加載器正在從位於/SmartFoxServer_2X/SFS2X/lib的jar中加載http-client .class文件,該文件的版本比我從Amazon第三方庫粘貼的版本稍舊,並且沒有AWS需要的幾種方法。無論如何,我將SmartFox更新到最新版本,而且這個技巧。當然,我也可以將__ lib __文件夾中的罐子粘貼到lib以具有相同的版本。