NoClassDefFoundError указывает на неправильный класс - PullRequest
0 голосов
/ 07 мая 2010

Я проверяю установку программы, которая состоит из нескольких отдельных модулей. Они не являются взаимозависимыми. У меня есть apple.jar и orange.jar, они находятся в одной папке и были разработаны в одном проекте, но работают независимо друг от друга.

Запуск apple.jar проходит нормально, но orange.jar дает мне ошибку NoClassDefFoundError, указывающую на apple.jar.

/ usr / java / jre1.6.0_14 / bin / java -jar validator.jar

Исключение в потоке "main" java.lang.NoClassDefFoundError: orange / client / Apple Вызывается: java.lang.ClassNotFoundException: orange.client.Apple at java.net.URLClassLoader $ 1.run (неизвестный источник) at java.security.AccessController.doPrivileged (собственный метод) на java.net.URLClassLoader.findClass (неизвестный источник) в java.lang.ClassLoader.loadClass (Неизвестный источник) at sun.misc.Launcher $ AppClassLoader.loadClass (неизвестный источник) в java.lang.ClassLoader.loadClass (Неизвестный источник) в java.lang.ClassLoader.loadClassInternal (Неизвестный источник) Не удалось найти основной класс: validator / client / StormDataXMLGenerator. Программа выйдет.

В файле манифеста указан оранжевый правильный класс.

Main-Class: оранжевый / клиент / оранжевый

Кто-нибудь знает, почему он выдает мне NoClassDefFoundError? Заранее спасибо!

Ответы [ 6 ]

2 голосов
/ 07 мая 2010

Возможно orange.client.Orange зависит от orange.client.Apple? Похоже, ваш основной класс уже загружен, поэтому я предполагаю, что какой-то другой класс пытается ввести orange.client.Apple.

Или, может быть, в Java отсутствует банан: -)

1 голос
/ 07 мая 2010

Я не уверен, что это является причиной вашей проблемы, но, где вы говорите, у вас есть

Основной класс: оранжевый / клиент / оранжевый

Я думаю, это должно быть

Main-Class: orange.client.Orange

По крайней мере, так все примеры, которые я видел, делают это.

0 голосов
/ 07 мая 2010

Спасибо за все ответы! По-видимому, возникла проблема с файлом build.xml, который использовался для создания jar-файлов. Это было исправлено сейчас:)

0 голосов
/ 07 мая 2010

Свойство "Main-Class" в манифесте validator.jar должно быть установлено на "orange.client.Apple". Так что этот класс не должен быть частью вашего JAR. Вы можете попробовать две вещи: добавить этот класс в свой JAR-файл или добавить этот класс в путь к классам.

0 голосов
/ 07 мая 2010

В Java есть концепция пути к классам. Вы должны добавить apple.jar в путь к классам, чтобы orange.jar мог найти яблоки.

Назовите ваше приложение так:

java -cp apple.jar -jar orange.jar

В качестве альтернативы вы можете установить переменную среды CLASSPATH.

0 голосов
/ 07 мая 2010

Похоже, что, несмотря на все ваши усилия, некоторые взаимозависимости проникли между кодом в orange.jar и apple.jar. Если у вас есть доступ к исходному коду, взгляните на операторы import для всех классов в orange.jar, чтобы узнать, ссылаются ли они на что-либо в apple.jar.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...