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.