Ответ 1
Doing Project- > Clean... в 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"
Есть ли у кого подсказка, где проблема может быть?
Doing Project- > Clean... в Eclipse решил эту проблему для меня.
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?
Как упоминалось выше, "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 (независимо от того, что создано из команды сборки). Затем попробуйте снова создать/пакет/настроить проект.
Я думал, что моя проблема и ее решение могут помочь. Так что я получал эту же ошибку в своем проекте eclipse. В моем проекте у меня есть пара файлов jar и NOCLASSDEFERROR был брошен для файла в файле jar.
Мои файлы библиотеки были частью имени папки "lib" в моем проекте heirarchy.I изменил имя моей папки на "libs" и wila, с которой она работала.
(Я заглянул в файл .classpath, и у меня были пары ключ-значение, а в записи для моего файла jar был ключ с именем "lib", и, следовательно, я подумал, что, возможно, изменение в lib могло бы помочь.)
Я вижу это слишком часто в последнее время. Только сегодня у меня возникла проблема с классом в том же пакете, что и уязвимый класс с красным флагом!
Выход из затмения и перезапуск обычно работает, чтобы разрешить красный флаг в затронутом классе, но иногда красный проект остается в проекте, тогда мне также нужно закрыть проект и снова открыть его, чтобы избавиться от отдельного красного флага, Очень странно видеть красный флаг в проекте, без красных флагов в любом из его дочерних каталогов.
С кластерами проекта maven я закрываю и открываю все проекты в кластере после перезапуска eclipse.
Это, по-видимому, обычная ошибка. Решение:
Надеюсь, что это поможет в некоторых случаях.
Хотя это дикая догадка и может не примениться в вашей конкретной ситуации, это могло бы спасти меня около часа.
Если вы "преобразовали" простой проект в проект Java (отредактировав файл .project и добавив соответствующий тег), убедитесь, что у вас тоже есть соответствующий указатель - мой проект не был создан, хотя Eclipse попытался и не запускайте строителей (успех!):
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
Я тоже столкнулся с той же проблемой. Затем выяснилось, что путь к папке lib в пути к классам был установлен неправильно.
Удар в темноте, но у меня была такая же точная проблема. Я решил это, удалив проект из моей рабочей области (будьте осторожны, чтобы не удалять с диска), а затем повторно импортировал проект, и он работал нормально. Я думаю, что мой был вызван плохим закрытием окон (перезапуск окон правильно не исправил проблему). НТН.
Я обнаружил, что у меня была банка в WEB-INF/lib, которая была в моем пути к классам, однако, когда я обновил ее до последней версии, имя файла было другим. Удаление старого файла jar из пути к классам и добавление нового исправили проблему. Как ни странно, Eclipse, похоже, не предупреждал меня о том, что старый файл jar отсутствовал и, похоже, компилировался, однако ничто не собиралось скомпилировать, следовательно, NoClassDefFoundError. Подсказка для меня заключалась в том, что каталог build/classes был настроен в проекте как выходная папка, но после сборки не создавались файлы классов после сборки.
Перейдите по пути создания и проверьте наличие ошибок в файлах jar, их можно перенести в другое место. если у вас есть ошибки в файлах jar. Удалите их и найдите их, нажав добавить внешние банки.
-cnufederer
Убедитесь, что все библиотеки, которые вы используете в своем проекте, не ссылаются на другие проекты в рабочей области. Это была моя проблема.
У меня была аналогичная проблема, и это связано с библиотеками, на которые ссылается путь сборки java; Я ссылался на библиотеки, которые больше не существовали, когда я делал обновление. Когда я удалил эти ссылки, проект снова запустился.
Библиотеки перечислены в разделе "Путь сборки Java" в окне свойств проекта.
Надеюсь, что это поможет.
обе проблемы будут из-за classpathref= "master-classpath", проверьте правильность значения
Когда вы запускаете свою программу, она сохраняет конфигурацию запуска, которую вы можете модифицировать. Если что-то изменилось в процессе сборки/запуска, у вас могут быть неправильные настройки. Например, я работал с maven, а некоторые ссылки на конфигурацию запуска - maven2_classpath_container. При удалении конфигурации запуска и повторной запуске программы она может снова работать.
Я вижу, что люди уже говорили о пути класса. Поскольку ответа нет, я предполагаю, что он не связан с путём класса. Поэтому я хотел бы добавить, что отсутствие директивы пакета также может привести к не найденным ошибкам класса.
Это работало для меня в eclipse:
Еще один случай, когда может произойти java.lang.NoClassDefFoundError - во время второй/последующей попытки создать экземпляр класса после того, как первая попытка не удалась для какого-либо другого исключения или ошибки. Похоже, что загрузчик классов кэширует знания о том, что он не смог создать экземпляр класса с первой попытки, но не по этой причине. Таким образом, он сообщает NoClassDefFoundError.
Так что это хорошая идея, чтобы убедиться, что не было ошибок/исключений с более ранней попыткой создания экземпляра класса перед тем, как спуститься к кроличьей дыре, пытаясь устранить проблему NoClassDefFoundError.
Если вы используете Eclipse, попробуйте Project > clean и попробуйте перезагрузить сервер
Для меня проблема в том, что я настроил другую папку в разделе "Запуск конфигурации", у которой был класс без последних изменений. Как только я его удалил, ссылаясь на правильную папку bin, он начал работать. Надеюсь, это поможет кому-то.
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