ClassNotFoundException при запуске модульных тестов JUnit в Eclipse (с использованием Maven)

Я только что обновил свой SpringSource Tools Suite (STS, вариант IDE Eclipse) до последней версии (v3.6.1). Тогда все мои юнитовые тесты JUnit не могут быть запущены снова. Я получаю эту ошибку:

Class not found ClassToTest
java.lang.ClassNotFoundException: ClassToTest
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)

Согласно этому блогу: ClassNotFoundException при запуске модульных тестов JUnit в Eclipse (с использованием Maven), это связано с некоторой неправильной конфигурацией плагина Maven в Eclipse. Однако в STS 3.6.2 я не могу найти этот параметр "Включить модули" в плагин Maven. Как я могу исправить эту проблему и снова включить мои модульные тесты?

Ответ 1

ОК, похоже, мне придется ответить на этот вопрос сам.

Основной причиной этой проблемы является плагин m2eclipse eclipse. Новая версия этого плагина не поддерживает вложенные модули в один проект. Если нам действительно нужно увидеть несколько модулей, мы должны удалить старый из обозревателя пакетов и создать рабочий набор и снова импортировать проект, используя опцию "импортировать существующие проекты maven". Мастер импорта eclipse выведет окно и спросит, какой модуль будет импортирован. Затем мы можем выбрать все модули и завершить импорт. В результате рабочий набор будет содержать все модули вашего проекта и рассматривать каждый модуль как отдельный проект, хотя в рабочей области ваши модули все еще находятся в одном проекте. Делая это, он решает все проблемы, с которыми я столкнулся в Eclipse, связанные с classpath, такие как невозможность поиска класса или невозможность запуска модульных тестов и получение java.lang.ClassNotFoundException.

Для справки, вот статья, чтобы научить вас, как создать рабочий набор: Рабочий набор

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

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

Ответ 2

В текущем плагине m2e еще есть обратные обратные черточки. Модульные тесты не могли быть запущены, так как они включали проект, сгруппированный в рабочий набор. Следующие могут помочь:

  • Щелкните правой кнопкой мыши на проекте, включая junit-tests.
  • Выберите Maven → Отключить разрешение рабочей области

Попробуйте снова запустить тест.

Ответ 3

Я думаю, что нашел решение, по крайней мере, это сработало для меня: щелкните правой кнопкой мыши по проекту и выберите "Maven" → "Зависимости обновлений"

Тогда, когда я попытался, я не получил ClassNotFoundException.

Ответ 4

Я пробовал все упомянутое здесь и в других сообщениях. Некоторые из решений, которые предлагали люди:

  • Измените папку вывода для тестовых классов.
  • Создайте настраиваемый строитель для проекта, который будет запускать тестовую компиляцию из Maven.
  • Перемещение зависимостей Maven выше в списке Order and Export в пути сборки проекта.

Было много, гораздо больше, но тот, который я нашел для работы, был следующим:

  • Закройте среду разработки.
  • Удалите банки, используемые проектом, из моего локального репозитория Maven.
  • Откройте среду IDE.
  • Создайте проект.
  • Запустите тест.

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

Ответ 5

Мы также столкнулись с тем же ClassNotFoundException, пытаясь запустить тестовый класс JUnit. Но когда мы попытались выполнить следующие шаги, он успешно запущен.

  • Выберите свой проект.
  • Щелкните по опции проекта, отображаемой на панели инструментов в Eclipse IDE.
  • Выберите "clean".
  • Теперь попробуйте запустить тестовый файл.

Ответ 6

Как работа, попробуйте запустить mvn test-compile (либо в Eclipse, либо из командной строки), затем попробуйте запустить тест Junit в Eclipse.