Странный "java.lang.NoClassDefFoundError" в Eclipse

У меня есть проект Java в Eclipse, который отлично работает ровно до сегодняшнего дня, когда я обновляю некоторые файлы (включая файл ant build.xml). Когда я создаю проект, появляется следующая ошибка:

java.lang.NoClassDefFoundError: proj/absa/FrontEnd/ApplicationStarter
Caused by: java.lang.ClassNotFoundException: proj.absa.FrontEnd.ApplicationStarter
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source) at
    java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)  
Exception in thread "main" 

Есть ли у кого подсказка, где проблема может быть?

Ответ 1

Doing Project- > Clean... в Eclipse решил эту проблему для меня.

Ответ 2

java.lang.ClassNotFoundException означает проблемы CLASSPATH. Не имея подсказки, вы предполагаете, что CLASSPATH установлен правильно, но это не так.

Если вы работаете с Eclipse, убедитесь, что каталог, в котором находятся ваши компилированные файлы .class, находится в CLASSPATH и имеет в нем необходимые файлы .class.

Если вы строите с помощью Ant, убедитесь, что вы видите что-то подобное в файле build.xml:

<path id="production.class.path">
    <pathelement location="${production.classes}"/>
    <pathelement location="${production.resources}"/>
    <fileset dir="${production.lib}">
        <include name="**/*.jar"/>
        <exclude name="**/junit*.jar"/>
        <exclude name="**/*test*.jar"/>
    </fileset>
</path>

ОБНОВЛЕНИЕ: либо у вас нет JAVA_HOME/bin в вашем PATH, либо вы загрузили JRE вместо JDK. Проверьте каталог, в котором вы установили Java, и посмотрите, есть ли в вашем каталоге /bin javac.exe. Если у вас нет /bin, загрузите JDK и установите его.

Если у вас есть /bin с javac.exe в нем, проверьте свой PATH, чтобы увидеть, что каталог Java/bin находится в PATH. После того, как вы установите его, откройте командную оболочку и введите "javac -version", чтобы убедиться, что все хорошо.

Какой JDK вы сказали Eclipse?

Ответ 3

Как упоминалось выше, "java.lang.ClassNotFoundException означает проблемы CLASSPATH".

В моей настройке я запускаю Maven для сборки (вместо Ant) и используя Eclipse (вместо Netbeans).

Обычно для создания и настройки проекта я запускаю команды "mvn clean", "mvn compile", "mvn eclipse: eclipse" из командной строки Windows. Последняя команда "mvn eclipse: eclipse" обновляет конфигурацию проекта, создавая файлы .classpath и .project.

Чтобы устранить проблему, я удалил два файла (.classpath и .project), затем перезапустил три команды.

Поэтому, в зависимости от вашей конфигурации, попробуйте найти файлы classpath/project (сделать резервную копию) и удалить их. Вы также можете попробовать удалить папку target/release/build (независимо от того, что создано из команды сборки). Затем попробуйте снова создать/пакет/настроить проект.

Ответ 4

Я думал, что моя проблема и ее решение могут помочь. Так что я получал эту же ошибку в своем проекте eclipse. В моем проекте у меня есть пара файлов jar и NOCLASSDEFERROR был брошен для файла в файле jar.

Мои файлы библиотеки были частью имени папки "lib" в моем проекте heirarchy.I изменил имя моей папки на "libs" и wila, с которой она работала.

(Я заглянул в файл .classpath, и у меня были пары ключ-значение, а в записи для моего файла jar был ключ с именем "lib", и, следовательно, я подумал, что, возможно, изменение в lib могло бы помочь.)

Ответ 5

Я вижу это слишком часто в последнее время. Только сегодня у меня возникла проблема с классом в том же пакете, что и уязвимый класс с красным флагом!

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

С кластерами проекта maven я закрываю и открываю все проекты в кластере после перезапуска eclipse.

Ответ 6

Это, по-видимому, обычная ошибка. Решение:

  • щелкните правой кнопкой мыши проект
  • выберите свойства
  • выберите "Компилятор Java"
  • отмените первый флажок "Включить специальные настройки проекта"
  • Применить
  • сохранить
  • запустить

Надеюсь, что это поможет в некоторых случаях.

Ответ 7

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

Если вы "преобразовали" простой проект в проект Java (отредактировав файл .project и добавив соответствующий тег), убедитесь, что у вас тоже есть соответствующий указатель - мой проект не был создан, хотя Eclipse попытался и не запускайте строителей (успех!):

<buildSpec>
    <buildCommand>
        <name>org.eclipse.jdt.core.javabuilder</name>
        <arguments>
        </arguments>
    </buildCommand>
</buildSpec>

Ответ 8

Я тоже столкнулся с той же проблемой. Затем выяснилось, что путь к папке lib в пути к классам был установлен неправильно.

Ответ 9

Удар в темноте, но у меня была такая же точная проблема. Я решил это, удалив проект из моей рабочей области (будьте осторожны, чтобы не удалять с диска), а затем повторно импортировал проект, и он работал нормально. Я думаю, что мой был вызван плохим закрытием окон (перезапуск окон правильно не исправил проблему). НТН.

Ответ 10

Я обнаружил, что у меня была банка в WEB-INF/lib, которая была в моем пути к классам, однако, когда я обновил ее до последней версии, имя файла было другим. Удаление старого файла jar из пути к классам и добавление нового исправили проблему. Как ни странно, Eclipse, похоже, не предупреждал меня о том, что старый файл jar отсутствовал и, похоже, компилировался, однако ничто не собиралось скомпилировать, следовательно, NoClassDefFoundError. Подсказка для меня заключалась в том, что каталог build/classes был настроен в проекте как выходная папка, но после сборки не создавались файлы классов после сборки.

Ответ 11

Перейдите по пути создания и проверьте наличие ошибок в файлах jar, их можно перенести в другое место. если у вас есть ошибки в файлах jar. Удалите их и найдите их, нажав добавить внешние банки.

-cnufederer

Ответ 12

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

Ответ 13

У меня была аналогичная проблема, и это связано с библиотеками, на которые ссылается путь сборки java; Я ссылался на библиотеки, которые больше не существовали, когда я делал обновление. Когда я удалил эти ссылки, проект снова запустился.

Библиотеки перечислены в разделе "Путь сборки Java" в окне свойств проекта.

Надеюсь, что это поможет.

Ответ 14

обе проблемы будут из-за classpathref= "master-classpath", проверьте правильность значения

Ответ 15

Когда вы запускаете свою программу, она сохраняет конфигурацию запуска, которую вы можете модифицировать. Если что-то изменилось в процессе сборки/запуска, у вас могут быть неправильные настройки. Например, я работал с maven, а некоторые ссылки на конфигурацию запуска - maven2_classpath_container. При удалении конфигурации запуска и повторной запуске программы она может снова работать.

Ответ 16

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

Ответ 17

Это работало для меня в eclipse:

  • Перейти к проекту → Свойства
  • Перейдите на вкладку "Источник"
  • Снимите флажок → Разрешить выходные папки для исходных папок.
  • Применить изменения и запустить проект

Ответ 18

Еще один случай, когда может произойти java.lang.NoClassDefFoundError - во время второй/последующей попытки создать экземпляр класса после того, как первая попытка не удалась для какого-либо другого исключения или ошибки. Похоже, что загрузчик классов кэширует знания о том, что он не смог создать экземпляр класса с первой попытки, но не по этой причине. Таким образом, он сообщает NoClassDefFoundError.

Так что это хорошая идея, чтобы убедиться, что не было ошибок/исключений с более ранней попыткой создания экземпляра класса перед тем, как спуститься к кроличьей дыре, пытаясь устранить проблему NoClassDefFoundError.

Ответ 19

Если вы используете Eclipse, попробуйте Project > clean и попробуйте перезагрузить сервер

Ответ 20

Для меня проблема в том, что я настроил другую папку в разделе "Запуск конфигурации", у которой был класс без последних изменений. Как только я его удалил, ссылаясь на правильную папку bin, он начал работать. Надеюсь, это поможет кому-то.

Ответ 21

BY ABDULHAYEE:

NoClassDefFoundError в Java возникает, когда Java Virtual Machine не может найти определенный класс во время выполнения, который был доступен во время компиляции. Например, если у нас есть вызов метода из класса или доступ к любому статическому члену класса, и этот класс недоступен во время выполнения, тогда JVM будет вызывать NoClassDefFoundError. Важно понять, что это отличается от ClassNotFoundException, которое возникает при попытке загрузить класс только во время выполнения, и имя было предоставлено во время выполнения, но не во время компиляции. Многие разработчики Java смешивают эту две ошибки и путаются.

Короче, NoClassDefFoundError появится, если класс присутствовал во время компиляции, но не доступен в java classpath во время выполнения. Обычно вы увидите строку ниже в журнале, когда вы получаете NoClassDefFoundError: Исключение в потоке "main" java.lang.NoClassDefFoundError Исключение в потоке "main" просто указывает, что его "основной" поток, который не может найти конкретный класс, может быть любой нитью, поэтому просто не беспокойтесь. Разница между этой ошибкой, возникающей в основном потоке и другом потоке, заключается в том, что при исключении в потоке "main" происходит сбой программы или закрывается сам по себе, в отличие от другого потока, и в этом случае ваша программа будет продолжать работать.

Подробнее: http://javarevisited.blogspot.com/2011/06/noclassdeffounderror-exception-in.html#ixzz2jr35SsaZ