Java: NoClassDefFoundError: org/json/JSONExceptionJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Java: NoClassDefFoundError: org/json/JSONException

Сообщение Anonymous »

Итак, я провел целый день с этой проблемой.

Я уверен, что использую правильный путь к классам.

Кроме того, у меня есть другие пакеты как зависимости, и они отлично работают.

У меня есть класс, который использует org.json.*

Также есть и другие внешние пакеты используется в этом классе.

Все эти зависимости размещены в виде jar-файлов в моем /path/to/libs/.

json-20160212.jar входит в их число.

Я собираю исходники с помощью

Код: Выделить всё

javac \
-cp "src/:/path/to/libs/json-20160212.jar:/path/to/libs/other.jar:/path/to/libs/another.jar" \
-d dst/ \
src/com/example/Source.java
Компиляция проходит без проблем.

Затем я создаю jar из своих файлов классов.

Манифест :

Код: Выделить всё

Main-Class: com.example.Source
Class-Path: /path/to/libs/json-20160212.jar
/path/to/libs/other.jar
/path/to/libs/another.jar
Командная строка:

Код: Выделить всё

jar cfm output.jar manifest -C dst/ ./com
Я получаю jar с этим манифестом:

Код: Выделить всё

Manifest-Version: 1.0
Class-Path: /path/to/libs/json-20160212.jar /path/to/libs/other.jar /p
ath/to/libs/another.jar
Created-By: 1.7.0_101 (Oracle Corporation)
Main-Class: com.example.Source
Насколько я понял, разделение строк в скомпилированном манифесте — это нормально.

Теперь я Я запускаю свое приложение из командной строки и получаю следующую ошибку:

Код: Выделить всё

Exception in thread "Thread-0" java.lang.NoClassDefFoundError: org/json/JSONException
at com.example.Source.run(Source.java:30)
Caused by: java.lang.ClassNotFoundException: org.json.JSONException
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 1 more
Насколько я знаю, это означает, что org.json.JSONException был в порядке во время компиляции, но отсутствовал во время выполнения.

Но что должно быть Мне нужна эта информация?

У меня есть этот файл. Он был на своем месте во время компиляции и во время выполнения.

Также есть и другие зависимости, и их jar-файлы тоже находятся на этом месте.

Если Я удалил использование JSON из своего приложения, все работает нормально.

Итак, я могу сделать вывод, что проблему создает сам пакет org.json.

Что мне нужно сделать, чтобы это заработало?

ОБНОВЛЕНИЕ

Теперь я внес следующие изменения:

Моя структура каталогов:

Код: Выделить всё

libs/
json-20160212.jar
other.jar
another.jar
src/
com/
example/
Source.java
dst/
Манифест:

Код: Выделить всё

Main-Class: com.example.Source
Class-Path: libs/json-20160212.jar
libs/other.jar
libs/another.jar
Компиляция:

Код: Выделить всё

javac \
-cp "src/:libs/json-20160212.jar:libs/other.jar:libs/another.jar" \
-d dst/ \
src/com/example/Source.java
Архивирование:

Код: Выделить всё

jar cfm dst/output.jar manifest -C dst/ ./com ./libs
Я получаю jar со структурой как исключенную:

Код: Выделить всё

META-INF/
META-INF/MANIFEST.MF
com/
com/example/
com/example/Source.class
libs/
libs/json-20160212.jar
libs/other.jar
libs/another.jar
И я запускаю его с помощью java -jar dst/output.jar.

Результат тот же: java. lang.NoClassDefFoundError: org/json/JSONException

Подробнее здесь: https://stackoverflow.com/questions/368 ... nexception
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»