1

ファイルで外部 jar を使用すると問題が発生します。私はいつも得る:

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

このファイルはクラスパス上にあり、jar の実行時にオプションを設定しています。

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

このコマンドを呼び出すと、このファイルは正常にコンパイルされます。

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

何をすべきか?

4

3 に答える 3

2

クラスローダーがクラスの静的メンバーを初期化できない場合、たとえば例外がスローされた場合、JVMはjava.lang.NoClassDefFoundErrorをスローします。または、このクラスの静的初期化子によってアクセスされる別のクラスが見つからない場合。これは何が起こっているように見えます。クラスローダーがHBaseConfiguratonをロードするのに疲れたとき、このクラスHBaseConfigurationは、例外につながる大砲が取得するものを予期しており、それは失われます。
この種の失敗をデバッグするのは大変なことです。

編集:何が欠けているかを理解する最も簡単な方法は、すべてのHBaseソースが接続されたデバッガーでプログラムを起動し、たとえばEclipseでHBaseConfiguration.create()呼び出しをトレースすることです。

于 2010-08-17T19:38:22.723 に答える
0

私の問題は、-classpathオプションを使用してクラスパスを設定し、jar を実行していたため、-classpathオプションが無視されていたことです。

マニフェストファイルにjarを追加しましたが、これは機能します。

これは同様の問題です: Java クラスパスに複数の jar を設定する

于 2010-09-15T08:12:45.787 に答える