2010-08-17 76 views
1

我有問題在我的文件中使用外部罐子。我總是得到:外部罐和HBase類路徑

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration` 
at this line: `Configuration config = HBaseConfiguration.create(); 

而且這個文件是在類路徑中,運行罐子當我設置選項:

$ javac -classpath "/usr/lib/hbase/*:/usr/lib/hadoop/*" HBaseScanner.java 
:調用此命令後

$ java -jar hbase.jar -classpath "/usr/lib/hbase/*:/usr/lib/hadoop/*" 

該文件編譯成功

該怎麼辦?

回答

0

我的問題是,我使用-classpath選項和運行jar設置classpath,導致-classpath選項被忽略。

我已經在清單文件中添加了jar,並且可以正常工作。

這是同樣的問題:Setting multiple jars in java classpath

2

如果類加載器無法初始化類的靜態成員(比如拋出異常),JVM將拋出java.lang.NoClassDefFoundError。或者,如果它找不到此類中的靜態初始化程序訪問的另一個類。這看起來像是發生了什麼事情,當類加載程序輪胎加載HBaseConfiguraton時,這個類HBaseConfiguration期望它的大炮得到的東西導致異常,這是失去了。
艱難的運氣調試這種失敗。

編輯: 找出缺失的最簡單方法是在調試器中啓動該程序,並在所有HBase源連接(例如在Eclipse下)並跟蹤HBaseConfiguration.create()調用。

0

這將是非常方便的,如果Java的給了我們一個錯誤或者至少在這種情況下警告。我相信一種解決方案就是像這樣執行你的罐子

java -cp "myclasspath":myjarfile.jar MyClassname