I'm having problem with using external jars in my file. I always get:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration`
at this line: `Configuration config = HBaseConfiguration.create();
And this file is on the classpath, I'm setting options when running jar:
$ java -jar hbase.jar -classpath "/usr/lib/hbase/*:/usr/lib/hadoop/*"
This file compiles successfully after invoking this command:
$ javac -classpath "/usr/lib/hbase/*:/usr/lib/hadoop/*" HBaseScanner.java
What to do?
JVM будет бросать java.lang.NoClassDefFoundError, если загрузчик класса не может инициализировать статические члены класса, скажем, брошено исключение. Или если он не может найти другой класс, к которому обращается статический инициализатор в этом классе. Это похоже на то, что происходит, когда загрузчик классов пытается загрузить HBaseConfiguraton, этот класс HBaseConfiguration ожидает чего-то, что он не может получить, что приводит к исключению, которое теряется.
Не повезло с отладкой такого рода сбоев.
EDIT:
Самый простой способ выяснить, чего не хватает, - запустить программу в отладчике со всеми подключенными источниками HBase, скажем, в Eclipse, и отследить вызов HBaseConfiguration.create()
.