2015-01-11 2 views
0

для тех, кто уже сумел использовать эту реализацию Java в LevelDB https://github.com/dain/leveldb/NoClassDefFoundError при использовании Java осущ из LevelDB

Я получаю следующую трассировку стека при попытке выполнить код в ридми:

NoClassDefFoundError возникает при запуске следующей строки:

DB db = factory.open (новый файл («пример»), опции);

Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/collect/Lists 
at org.iq80.leveldb.impl.DbImpl.(DbImpl.java:95) 
at org.iq80.leveldb.impl.Iq80DBFactory.open(Iq80DBFactory.java:59) 
at com.test.LevelDBDain.main(LevelDBDain.java:23) 
Caused by: java.lang.ClassNotFoundException: com.google.common.collect.Lists 
at java.net.URLClassLoader$1.run(URLClassLoader.java:372) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:360) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 

Я подтвердил, что new File("example") возвращает ненулевое значение; такой же, как переменные options

импортировать две банки, построенной из источника в мою библиотеку:

1.leveldb-api.jar 
2.leveldb.jar 

Я попытался это с выпусками 0,6, 0,7 и 0,8-SNAPSHOT и всегда получают ту же ошибку.

Это может быть что-то, что я делаю неправильно ... или отсутствует?

+0

Вы сами строили банки? Если да, проверили ли вы с помощью zip-viewer, что классы, которые вы ожидаете, находятся в архивах jar? Вы подтвердили, что они находятся на вашем пути к классу? 'new File (" example ")' будет возвращать ненулевое значение, если существует допустимый аргумент пути к файлу для потенциального создания файла. Он фактически не создает файл до тех пор, пока он не будет записан, так что ничего не сообщает. Ошибка говорит вам, что не может найти пакет для конкретного использования «Списки», предоставляемого пакетом Google. У вас есть все необходимые зависимости? –

+0

Да, я сам построил банки; спасибо за указатель @RyanJ. Ошибка заключается в реализации статического импорта для функции newArraylist: 'private final List pendingOutputs = newArrayList();'. Импорт «import static com.google.commons.collect.Lists.newArrayList;» является зависимостью проекта от библиотеки guava16. Соответствующий класс, который, кажется, не найден (com.google.common.collect.Lists) также, кажется, присутствует ... вместе со статической функцией 'newArrayList()' в нем. Может ли быть способ, по которому путь сборки каким-то образом пропускает импорт во время компиляции? – Tom

ответ

0

com.google.common.collect.util от guava является зависимостью библиотеки leveldb, но по какой-то причине добавление его явно в качестве зависимости для моего проекта java решило проблему.