NoClassDefFoundError при импорте класса с внутренним классом - PullRequest
1 голос
/ 20 февраля 2010

Я не могу импортировать определенный класс (FinanceService) из банки. Все остальные работают нормально, включая внутренний класс FinanceService$Versions. Я получаю исключение NoClassDefFound, и я не знаю, как действовать.

Это исключение возникает, перефразируя ответ, который я нашел здесь, , когда исходный код был успешно скомпилирован, но во время выполнения необходимые файлы классов не были найдены , но я ясно вижу его внутри банка, первые элементы которого:

META-INF/
META-INF/MANIFEST.MF
com/
com/google/
com/google/gdata/
com/google/gdata/client/
com/google/gdata/client/finance/
com/google/gdata/data/
com/google/gdata/data/finance/
com/google/gdata/client/finance/FinanceService$Versions.class
com/google/gdata/client/finance/FinanceService.class
com/google/gdata/client/finance/FinanceUtilities.class
com/google/gdata/client/finance/PortfolioQuery.class

Просто чтобы быть уверенным, я восстановил банки и все еще получил ту же ошибку. Поскольку это единственный класс, который имеет внутренний класс и не может загружаться, я рассмотрел гипотезу о том, что должен быть специальный способ его загрузки, но этот код доказывает обратное. Есть идеи, что делать?

Спасибо!

1 Ответ

3 голосов
/ 20 февраля 2010

Этот jar, очевидно, имеет много зависимостей, убедитесь, что у вас все они есть на CLASSPATH, когда вы запускаете Clojure. Также убедитесь, что вы не смешиваете версии. Я пропустил ссылку для скачивания gdata-finance-2.0.jar, которая у вас есть, и вместо этого загрузил http://gdata -java-client.googlecode.com / files / gdata-src.java-1.26.0.java.zip со страницы проекта, на которую вы ссылались, и которая содержала тонну jar-файлов в gdata/java/lib, одним из которых был финансовый фляга. Я разархивировал все и сделал следующее:

$ java -cp /path/to/clojure.jar:gdata/java/lib/* clojure.main
Clojure 1.2.0-master-SNAPSHOT
user=> (import '(com.google.gdata.client.finance FinanceService))
com.google.gdata.client.finance.FinanceService

Это, видимо, сработало. Но сейчас FinanceService$Versions не существует. Этого также не существует в FinanceService.java. Наверное, это другая версия библиотеки, чем та, которую вы используете.

Если вы получаете NoClassDefFound, убедитесь, что вы обращаете внимание на то, какой класс он не находит. FinanceService может отсутствовать, но может также жаловаться на отсутствие одной из его зависимостей.

...