質問

ファイルに外部ジャーを使用することに問題があります。私はいつもわかります:

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

そして、このファイルはclassPathにあります。JARを実行するときにオプションを設定しています。

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

このファイルは、このコマンドを呼び出した後に正常にコンパイルします。

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

何をすべきか?

役に立ちましたか?

解決 3

私の問題は、ClassPathを使用していることです -classpath オプションとjarを実行します -classpath 無視されるオプション。

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

これも同様の問題です。 Java ClassPathに複数の瓶を設定します

他のヒント

JVMは、クラスローダーがクラスの静的メンバーを初期化できない場合、java.lang.noclassdeffounderrorを投げます。例外がスローされます。または、このクラスの静的初期イザーによってアクセスされる別のクラスが見つからない場合。これは、クラスローダータイヤがHbaseconfiguratonをロードするときに何が起こっているかのように見えます。このクラスのHbaseconfigurationは、キャノンが例外につながる何かを期待しています。
この種の失敗をデバッグするのは難しいです。

編集:不足しているものを把握する最も簡単な方法は、すべてのHBaseソースが接続され、たとえばEclipseを使用し、トレースしてデバッガーでプログラムを起動することです。 HBaseConfiguration.create() 電話。

Javaがこの状況でエラーまたは少なくとも警告を与えてくれた場合、それは本当に便利です。私は1つの解決策があなたの瓶をこのように実行することだと思います

java -cp "myclasspath":myjarfile.jar MyClassname
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top