Eclipse - java.lang.ClassNotFoundException
При попытке запустить мой JUnit-тест из Eclipse я получаю "ClassNotFoundException". При запуске "mvn test" из консоли - все работает нормально. Также в Eclipse не сообщается о проблемах.
Моя структура проекта следующая:
- родительский проект (пом-упаковка)
- Веб-проект (war-package - мой JUnit-тест здесь)
- Flex проект
- Конфигурационный проект
редактировать: как класс не может быть найден? Это простое HelloWorld-приложение без специальных библиотек.
Вот конфигурация запуска моего JUnit: http://www.walkner.biz/_temp/runconfig.png
Testclass (но, как я уже сказал; он также не работает с простым HelloWorld...):
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import biz.prognoserechnung.domain.User;
import biz.prognoserechnung.domain.UserRepository;
import biz.prognoserechnung.domain.hibernate.UserHibernateDao;
public class UserDaoTest {
/**
* the applicationcontext.
*/
private ApplicationContext ctx = null;
/**
* the user itself.
*/
private User record = null;
/**
* Interface for the user.
*/
private UserRepository dao = null;
@Before
public void setUp() throws Exception {
String[] paths = { "WEB-INF/applicationContext.xml" };
ctx = new ClassPathXmlApplicationContext(paths);
dao = (UserHibernateDao) ctx.getBean("userRepository");
}
@After
public void tearDown() throws Exception {
dao = null;
}
@Test
public final void testIsUser() throws Exception {
Assert.assertTrue(dao.isUser("John", "Doe"));
}
@Test
public final void testIsNoUser() throws Exception {
Assert.assertFalse(dao.isUser("not", "existing"));
Assert.assertFalse(dao.isUser(null, null));
Assert.assertFalse(dao.isUser("", ""));
}
}
45 ответов
Я сталкивался с этой ситуацией несколько раз, и после многих попыток я нашел решение.
Проверьте путь сборки вашего проекта и включите определенные выходные папки для каждой папки. Перейдите по очереди через каждую исходную папку вашего проекта и установите выходную папку, которую будет использовать maven.
Например, ваш веб-проект src/main/java
должен иметь target/classes
под веб-проектом тестовые классы должны иметь target/test-classes
также под веб-проектом и тд.
Использование этой конфигурации позволит вам выполнить модульные тесты в Eclipse.
Еще один совет: если тестам вашего веб-проекта требуются файлы конфигурации, находящиеся в ресурсах, обязательно включите эту папку в качестве исходной и выполните правильную настройку пути сборки.
Надеюсь, поможет.
Подход Карлоса помог! Eclipse - java.lang.ClassNotFoundException
Попробуйте проверить classpath конфигурации запуска junit:
- Откройте настройки запуска
- Нажмите на jUnit-Test, который вы хотите запустить
- перейдите на вкладку classpath
- Попытайтесь добавить папку (нажмите на записи пользователя, нажмите на дополнительные, нажмите на добавление папок, нажмите ОК и найдите в выходной папке свои тестовые классы (те, которые вы найдете в projektproperties java build path, source))
работает для меня.
Ваш путь к классу сборки правильный, поэтому вы можете скомпилировать. путь к классу для вашего JUnit должен быть проверен. перейдите в меню "Выполнить" и выберите "Открыть диалоговое окно". там вы должны увидеть дерево слева с JUnit в качестве опции. откройте этот узел, найдите и выберите свой тест. на правой панели вы увидите вкладку для classpath. взгляните, чтобы убедиться, что ваш класс, который пытается создать тест, будет найден.
редактировать:
это похоже на проблему с maven и его поведение после выпуска изменило стандартные выходные папки Eclipse. я видел решения, описанные где
- поместив maven в путь начальной загрузки НАД JRE работает, или
- Бег
mvn clean test
делает трюк или - обновить все ваши проекты затмения, вызывая перестройку решает проблему
- зайдя в ваш проект и выбрав Maven->Update Configuration, решите проблему
с первыми тремя были сообщения о повторяющейся проблеме. последнее выглядит лучше для меня, но если это не сработает, пожалуйста, попробуйте другие.
Включение [х] Использовать временный файл JAR, чтобы указать путь к классам (для ограничения длины избежать CLASSPATH), внутри вкладки Classpath в конфигурации Run сделал трюк для меня.
Если ваш проект огромен и у вас много зависимостей от других родственных проектов и зависимостей maven, вы можете столкнуться с ограничениями длины пути к классам, и это, кажется, единственное решение (помимо того, что каталог для вашего локального репозитория maven короче (наш уже запускается при ц:/ м2)
Возможно, проблема в том, что в вашей папке сборки отсутствует файл класса. Одно из решений - очистить проект и восстановить его.
Это было мое решение проблемы. Конечно, многое может вызвать это. Для меня это было то, что Maven2 (не плагин для Eclipse) настраивал профиль eclipse для использования другого компоновщика (aspectJ), но у меня не было плагина в eclipse./
http://rbtech.blogspot.com/2009/09/eclipse-galileo-javalangclassnotfoundex.html
Ура Рамон Бакленд
У меня была точно такая же проблема, но я понял это! Перейдите к файлу вашего проекта и щелкните правой кнопкой мыши на нем, затем нажмите Refresh
или нажмите F5. Тогда попробуйте и запустите. Если это все еще не работает, тогда просто забудьте об этом, поскольку у меня была ТОЧНАЯ проблема, и это просто означает, что ваша версия Eclipse является мусором.
Здесь много замысловатых предложений.
Я сталкивался с этой проблемой несколько раз в проектах Maven после перемещения ресурсов с помощью перетаскивания или выполнения рефакторинга имен классов.
Если это происходит, просто скопируйте (не перемещайте) проблемный тестовый пример (.java
через терминал / файловый браузер в другое место, right-click -> Delete
в Eclipse и выберите удаление на диске, когда предоставлена опция, переместите / скопируйте скопированный файл в исходное местоположение файла, затем выберите свой проект в Eclipse и нажмите F5, чтобы обновить ресурсы.
Это быстро и легко сделать, и каждый раз исправляю проблему навсегда.
Я решаю, что путь Bulit ---> библиотеки ---> добавить библиотеку --->Junit проверить junit4
Право Сачина: даже при правильном пути к классу на вкладке "Проблемы" будет показано, что некоторая зависимость или ресурс / проект имеют ошибку, которую необходимо исправить, чтобы maven автоматически создавал и создавал классы при создании или изменении в тестовом классе,
"Привет,
Это очень старый июль (в каком году), но у меня была такая же проблема.
Фактическая проблема обнаружила, что eclipse не смогла сгенерировать файл класса для файла java, путь к классу был правильным.
Посмотрите вкладку проблемы и проверьте, отсутствует ли в вашем проекте что-то / файл. Вы можете создать новый proj и добавлять файлы один за другим и собирать их, пока он не прекратит компилировать и создавать классы (проверьте папку для рабочего пространства /proj/bin/package/ для классов)
его странное, но истинное слово "ecplise" не сработало, потому что 4 из 20 java-файлов использовали одно изображение, которое отсутствовало. и в результате ни один из файлов Java не был скомпилирован.
CLASSPATH здесь не проблема ".
Тест JUnit из затмения дал мне также NoClassDefFoundError. Запуск mvn clean test из командной строки дал мне следующую ошибку на нескольких jar-файлах: недопустимый заголовок LOC (неверная подпись). Удаление этих jar-файлов из локального репозитория m2 и повторный запуск mvn clean test снова решили мою проблему.
У нас было точное исключение (с использованием SpringSource Tools, tomcat, на Win7), и причина была в том, что мы произвели рефакторинг имени файла (переименовал файл) из SubDomain.java в Subdomain.java (D против d) и каким-то образом столкнулись, хотя SpringSource был показывая новое имя Subdomain.java. Решение состояло в том, чтобы удалить файл (через SpringSource) и создать его снова под именем Subdomain.java и скопировать его прежнее содержимое. Просто как тот.
Убедитесь, что ваш тестовый класс работал раньше, но вы внезапно столкнулись с проблемой. затем очистите свой проект и создайте его снова. Убедитесь, что проект настроен в пути сборки, как указано в статье выше.
Удаление проекта из затмения (а не с жесткого диска), который каким-то образом очищает рабочее пространство и повторно импортирует проект в затмение, снова сработало для меня.
Все, что я сделал, это Свойства -> Путь сборки Java -> Порядок и экспорт -> Включил все непроверенные поля -> Переместил Junit полностью вверх
Я тоже столкнулся с этой проблемой и смог найти подходящее решение для моего случая. Если ваш проект Eclipse имеет файл.classpath в корневом каталоге вашего проекта (см. Его в представлении "Навигатор" вместо представления "Проводник пакетов"), убедитесь, что ваш класс MavenPathentry появился до вашего класса JRE Container.
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
</classpath>
Если в вашем проекте нет файла.classpath, вы можете отредактировать Java Build Path вашего проекта, чтобы переключить порядок и экспорт. Если в вашем проекте есть файл.classpath, и вы меняете только порядок в пути сборки Java, вы увидите, что порядок не затронут, и проблема будет продолжаться.
И проект -> чистый никогда не повредит вещам после внесения изменений.
Решение моей проблемы, которое было похоже: библиотеки были недействительными. Если вы загляните в файл.classpath проекта, вы увидите теги classpathentry с ключом / значением kind="lib". Некоторые из моих были неверны.
Я не обнаружил это, пока я не отключил параметры проверки. То есть в файлах JSP и т. Д. Было так много ошибок, что ошибки пути к классам не были очевидными (или, возможно, даже появлялись). В результате ничего не компилировалось в выходные папки назначения, но никаких полезных ошибок почему.
Нажмите на project->properties->Java build path->Source
и проверить каждый src
папка все еще существует или недавно удалена. Исправьте пропущенный или неверный путь, перестройте и запустите тест. Это решит проблему.
Я попробовал все решения на этой странице: обновить проект, восстановить, все проекты очистить, перезапустить Eclipse, повторно импортировать (даже) проекты, восстановить maven и обновить. Ничего не сработало. То, что сработало, это скопировало класс под новым именем, которое работает нормально - странно, но верно.
Потерпев некоторое время, я просто исправил это:
- Через
Run
меню - Выбрать
Run Configurations
- Выберите конфигурацию прогона, связанную с вашим модульным тестом.
- Удаление записи из
Run Configuration
нажав удалить или нажав красный X.
Что-то должно быть испорчено в конфигурации с кэшированным прогоном.
Пытался
Link : [here][1]
Open your run configurations
Click on the jUnit-Test you want to start
go to the classpath tab
Try to add a folder (click on user entries, click on advanced, click on add folders,click on ok and search the outputfolder for your test classes(those you find under projektproperties java build path, source))
работал после
Maven 2 LifeCycle >> тест
Хм, выглядит немного странно, попробуйте запустить его со следующей аннотацией в верхней части класса:
@RunWith(SpringJUnit4ClassRunner.class)
public class UserDaoTest {
}
и дай мне знать, как ты с этим справляешься.
Убедитесь, что вы автоматически включили сборку. Если вы хотите убедиться, что ваши тестовые классы скомпилированы правильно, очистите целевую папку Maven (и любую папку bin, которую может использовать Eclipse). Вы также используете m2eclipse, так как я нахожу это немного проблематичным.
Обычно эта проблема возникает при запуске приложения Java java
инструмент не может найти файл класса.
В основном в проекте maven мы видим эту проблему, потому что проблема синхронизации Eclipse-Maven. Чтобы решить эту проблему:Maven-> Обновить конфигурацию
Я предлагаю попробовать добавить это к аргументам виртуальной машины;
-verbose:class -verbose:module -Xdiag
Затем вы можете отладить его из Eclipse, который должен распечатать какое-то сообщение вроде:
java.lang.ClassNotFoundException: org.adligo.somewhere.Foo
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:398)
at java.base/sun.launcher.LauncherHelper.loadMainClass(LauncherHelper.java:760)
at java.base/sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:655)
Отсюда вы можете установить точку останова на LancherHelper.java 760 для отладки самого Eclipse Lanucher. В моем случае я заметил, что путь к классам пользователя оказался нулевым, хотя в конфигурации Lanuch у меня много jar-файлов.
При запуске веб-приложений большинство из нас получат это исключение. Когда вы получили эту ошибку, вы поместили файлы.class в соответствующую папку.
В веб-приложениях все файлы.class должны находиться в папке WEB-INF\Classes. если вы используете веб-приложение в Eclipse, пожалуйста, следуйте инструкциям
Шаг 1: Щелкните правой кнопкой мыши папку "Проект" и выберите "Свойства". Шаг 2: Нажмите "Путь сборки Java", вы увидите различные вкладки, такие как "источник", "проекты", "библиотеки" и т. Д. Шаг 3: выберите папку "Исходный код". под этим вы увидите детали вашего проекта. Шаг 4: в папке "Source" вы увидите опцию Default Output Folder. здесь вы должны указать папку классов под WEB-INF. просто укажите путь, например, имя проекта /WebContent/WEB-INF/ классы, структура которых зависит от вашего приложения. Пожалуйста, помните, что вам здесь не нужно создавать папку "classes". Eclipse создаст его для вас. Шаг 5: нажмите "ОК" и выполните чистку и сборку проекта. вот и все ваше приложение будет работать сейчас.
У меня такая же проблема. Все, что я сделал, было
я). Сгенерированные артефакты затмения
mvn clean eclipse:eclipse
II). Обновите проект и перезапустите тест junit. Должно работать нормально.
Что ж, вы можете решить эту проблему в основном, создав новый проект.
- Закройте проект (сохраните код в другой папке на вашем компьютере).
- Создайте новый проект (добавьте новый окончательный каталог и не оставляйте выбранным каталог по умолчанию).
- Переделайте свой предыдущий проект, добавив ранее сохраненный код.
Это происходит потому, что, вероятно, вы создали проект и не выбрали каталог / папку или что-то в этом роде. Надеюсь, вам помогли!
Перейдите в "Путь сборки" -> "Исходный код" и переключите на "Да" параметр "Игнорировать дополнительные проблемы компиляции" для всех исходных папок.
Пожалуйста, укажите, чтобы исправить JDK из Windows > Настройки> Java > Установленный JRE.
Не указывайте на jre, указывайте на правильный JDK. Я указал на JDK 1.6U29 и обновил проект.
В дальнейшем проблема исчезла и тесты jUnit работают нормально.
Спасибо,
-Tapas
Для проекта Hybris я исправил проблему, применив следующие изменения в пути сборки. Я выбрал «Проект» и нажал «Применить и закрыть».
Запустите проект как тест Maven, затем запустите как тест JUnit.