Внешние банки и HBase в classpath - PullRequest
       30

Внешние банки и HBase в classpath

1 голос
/ 17 августа 2010

У меня проблема с использованием внешних файлов в моем файле. Я всегда получаю:

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

Что делать?

Ответы [ 3 ]

2 голосов
/ 17 августа 2010

JVM сгенерирует java.lang.NoClassDefFoundError, если загрузчик классов не сможет инициализировать статические члены класса, скажем, сгенерировано исключение. Или если он не может найти другой класс, к которому обращается статический инициализатор в этом классе. Это похоже на то, что происходит, когда загрузчик классов устает загружать HBaseConfiguraton, этот класс HBaseConfiguration ожидает чего-то, что не может получить, что приводит к исключению, которое потеряно.
Неудачи в устранении подобных ошибок.

РЕДАКТИРОВАТЬ: Самый простой способ выяснить, чего не хватает, - запустить программу в отладчике со всеми подключенными источниками HBase, скажем, в Eclipse, и отследить вызов HBaseConfiguration.create().

0 голосов
/ 20 августа 2015

Было бы очень удобно, если бы java дал нам ошибку или хотя бы предупреждение в этой ситуации. Я полагаю, что одно из решений - выполнить ваш кувшин вот так

java -cp "myclasspath":myjarfile.jar MyClassname
0 голосов
/ 15 сентября 2010

Моя проблема заключалась в том, что я устанавливал classpath с помощью опции -classpath и запускал jar, что приводит к игнорированию опции -classpath.

Я добавил баночки в файл манифеста, и это работает.*

Это похожая проблема: Установка нескольких jar-файлов в пути к классам Java

...