Eclipse - java.lang.ClassNotFoundException - PullRequest
93 голосов
/ 27 июня 2009

При попытке запустить мой JUnit-тест из Eclipse я получаю "ClassNotFoundException". При запуске "mvn test" из консоли - все работает нормально. Также в Eclipse не сообщается о проблемах.

Структура моего проекта следующая:

  • родительский проект (пом-упаковка)
    • Веб-проект (war-package - мой JUnit-тест здесь)
    • Гибкий проект
    • Конфигурационный проект

edit: Как класс не найти? Это простое 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("", ""));
    }
}

Ответы [ 35 ]

192 голосов
/ 30 июня 2009

Я сталкивался с такой ситуацией несколько раз и после многих попыток нашел решение.

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

Например, src/main/java вашего веб-проекта должно иметь target/classes в рамках веб-проекта, тестовые классы должны иметь target/test-classes также в рамках веб-проекта и т. Д.

Использование этой конфигурации позволит вам выполнить модульные тесты в eclipse.

Еще один совет: если тестам вашего веб-проекта требуются файлы конфигурации, находящиеся в ресурсах, обязательно включите эту папку в качестве исходной и выполните правильную настройку пути сборки.

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

47 голосов
/ 06 апреля 2011

Подход Карлоса помог! Eclipse - java.lang.ClassNotFoundException

Попробуйте проверить путь к классу конфигурации запуска Junit:

  1. Откройте настройки запуска
  2. Нажмите на jUnit-Test, который вы хотите запустить
  3. перейти на вкладку classpath
  4. Попробуйте добавить папку (нажмите на записи пользователей, нажмите на дополнительные, нажмите на добавление папок, нажмите ОК и найдите в выходной папке свои тестовые классы (те, которые вы найдете в projektproperties java build path, source))

работает на меня.

17 голосов
/ 27 июня 2009

Ваш путь к классу сборки правильный, поэтому вы можете скомпилировать. путь к классу для вашего JUnit должен быть проверен. перейдите в меню «Выполнить» и выберите «Открыть диалоговое окно запуска». там вы должны увидеть дерево слева с JUnit в качестве опции. откройте этот узел, найдите и выберите свой тест. на правой панели вы увидите вкладку для classpath. взгляните, чтобы убедиться, что ваш класс, который пытается создать тест, найден.

редактирование:

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

  • помещение maven в путь начальной загрузки НАД JRE работает, или
  • работает mvn clean test делает трюк или
  • обновление всех ваших проектов Eclipse, в результате чего перестройка решает проблему
  • зайдя в ваш проект и выбрав Maven-> Обновить конфигурацию, решите проблему

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

здесь и здесь некоторая информация

4 голосов
/ 03 августа 2012

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

3 голосов
/ 13 сентября 2009

Это было моё решение проблемы. Конечно, многое может вызвать это. Для меня это было то, что Maven2 (не плагин для Eclipse) настраивал профиль eclipse для использования другого компоновщика (aspectJ), но у меня не было плагина в eclipse ./

http://rbtech.blogspot.com/2009/09/eclipse-galileo-javalangclassnotfoundex.html

Приветствие Рамон Бакленд

3 голосов
/ 20 сентября 2012

У меня была точно такая же проблема, но я понял это! Перейдите к файлу своего проекта и щелкните по нему правой кнопкой мыши, затем нажмите Refresh или нажмите F5. Тогда попробуйте и запустите. Если это все еще не работает, тогда просто забудьте об этом, поскольку у меня была ТОЧНАЯ проблема, и это просто означает, что ваша версия Eclipse - мусор.

3 голосов
/ 10 сентября 2012

Здесь много замысловатых предложений.

Я сталкивался с этой проблемой несколько раз в проектах Maven после перемещения ресурсов с помощью перетаскивания или выполнения рефакторинга имен классов.

Если это произойдет, просто скопируйте (не перемещайте) проблемный контрольный пример (.java) через терминал / файловый браузер в другое место, right-click -> Delete в Eclipse и выберите удаление на диске, когда предоставляется опция, переместить / скопировать скопируйте файл в исходное местоположение, затем выберите свой проект в Eclipse и нажмите F5, чтобы обновить ресурсы.

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

2 голосов
/ 08 октября 2016

Я решаю этот путь Bulit ---> библиотеки ---> добавить библиотеку ---> Junit check junit4

2 голосов
/ 05 апреля 2011

право Сачина: Даже при правильном пути к классу на вкладке «Проблемы» будет показано, что в некоторой зависимости или в ресурсе / проекте есть ошибка, которую необходимо исправить, чтобы maven автоматически создавал и создавал классы при создании или внесении изменений в ваш тестовый класс.

"Привет,

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

Обнаружена актуальная проблема, из-за которой eclipse не смогла сгенерировать файл класса для файла java, путь к классу указан правильно.

См. Вкладку проблемы и проверьте, отсутствует ли в вашем проекте что-то / файл. Вы можете создать новый proj и добавлять файлы один за другим и собирать их, пока он не прекратит компилировать и создавать классы (проверьте рабочее пространство / proj / bin / package / folder для классов)

это странное, но верное слово, ecplise не сработала, потому что 4 из 20 java-файлов использовали одно изображение, которое отсутствовало. и в результате ни один из файлов Java не был скомпилирован.

CLASSPATH здесь не проблема. "

2 голосов
/ 04 мая 2012

У нас было точное исключение (с использованием SpringSource Tools, tomcat, на Win7), и причина была в том, что мы произвели рефакторинг имени файла (переименовал файл) из SubDomain.java в Subdomain.java (D против d) и каким-то образом столкнулись хотя SpringSource показывал новое имя Subdomain.java. Решением было удалить файл (через SpringSource) и создать его снова под именем Subdomain.java и вставить его прежнее содержимое. Все просто.

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