Получение исключения NoClassDefFoundError после добавления внешних файлов .java и .class - PullRequest
0 голосов
/ 16 января 2012

Прошу прощения за любые ошибки, которые я допускаю в номенклатуре, так как я относительно новичок в Eclipse и Java.

Я пишу приложение для Android, которое реализует внешний API (API Amazon Web Service).Загруженные файлы API включают в себя каталог, содержащий файлы .class, и каталог, содержащий файлы .java.

Добавляя их в качестве зависимостей, я сделал следующее:

  1. Eclipse-> свойства проекта-> путь сборки Java-> источник-> источник ссылки-> выбрать каталог, содержащий файлы .java.

  2. Eclipse-> свойства проекта-> путь сборки java->библиотеки-> добавить папку внешнего класса-> выбрать каталог, содержащий файлы .class.

Во время компиляции в этой конфигурации я получаю следующую ошибку:

    java.lang.IllegalArgumentException: already added: Lcom/ECS/client/jax/VariationSummary;
    Conversion to Dalvik format failed with error 1

Ошибка повторяется один раз для каждого файла класса.

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

01-15 15:29:20.756: E/AndroidRuntime(1038): java.lang.NoClassDefFoundError: com.ECS.client.jax.AWSECommerceService

РЕДАКТИРОВАТЬ

Полная трассировка стека:

01-15 17:12:28.256: W/dalvikvm(1227): Unable to resolve superclass of Lcom/ECS/client/jax/AWSECommerceService; (365)
01-15 17:12:28.296: W/dalvikvm(1227): Link of class 'Lcom/ECS/client/jax/AWSECommerceService;' failed
01-15 17:12:28.296: E/dalvikvm(1227): Could not find class 'com.ECS.client.jax.AWSECommerceService', referenced from method com.giftme.Amazon.searchRequest
01-15 17:12:28.296: W/dalvikvm(1227): VFY: unable to resolve new-instance 66 (Lcom/ECS/client/jax/AWSECommerceService;) in Lcom/giftme/Amazon;
01-15 17:12:28.306: D/dalvikvm(1227): VFY: replacing opcode 0x22 at 0x0000
01-15 17:12:28.306: D/dalvikvm(1227): VFY: dead code 0x0002-0033 in Lcom/giftme/Amazon;.searchRequest (Ljava/lang/String;)Z
01-15 17:12:28.306: W/dalvikvm(1227): threadid=10: thread exiting with uncaught exception (group=0x40015560)

01-15 17:12:28.306: E/AndroidRuntime(1227): FATAL EXCEPTION: Thread-13
01-15 17:12:28.306: E/AndroidRuntime(1227): java.lang.NoClassDefFoundError: com.ECS.client.jax.AWSECommerceService
01-15 17:12:28.306: E/AndroidRuntime(1227):     at com.giftme.Amazon.searchRequest(Amazon.java:21)
01-15 17:12:28.306: E/AndroidRuntime(1227):     at com.giftme.Friend$InterestsRequestListener$4.parseDataAndSearch(Friend.java:359)
01-15 17:12:28.306: E/AndroidRuntime(1227):     at com.giftme.Friend$InterestsRequestListener$4.run(Friend.java:329)
01-15 17:12:28.306: E/AndroidRuntime(1227):     at java.lang.Thread.run(Thread.java:1019)

и вот строка 21, к которой она относится:

AWSECommerceService service = new AWSECommerceService();

1 Ответ

1 голос
/ 16 января 2012

Прежде всего, вам нужно связать корневую папку файла пакета (например, / classes /, когда папка классов содержит, например, com / amazon / some / или / the / other). Поскольку файлы классов содержат всю информациювам не нужно использовать исходные файлы.

Однако вы можете добавить корень (снова) пакета, содержащего файлы Java, так что вы можете посмотреть на исходный код, если потребуется. Другое преимущество этогов том, что вы можете видеть имена аргументов метода в том виде, как они , а не , присутствующие в файлах классов, сделайте это, щелкнув источник ссылки в библиотеках вкладки «путь сборки» после развертывания элемента для папки класса.

...