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. Как я могу решить эту проблему и повторно включить свои модульные тесты?


person newguy    schedule 12.05.2011    source источник
comment
ClassToTest ваш собственный класс?   -  person Pål Brattberg    schedule 12.05.2011
comment
Да, это мой собственный Testclass, с которым будет работать JUnit.   -  person newguy    schedule 12.05.2011
comment
Он работает в командной строке?   -  person Pål Brattberg    schedule 12.05.2011
comment
Я верю, что это так. Но командная строка не дает такой читаемой информации, как Eclipse.   -  person newguy    schedule 12.05.2011
comment
На всякий случай попробуйте mvn test в командной строке, чтобы убедиться, что он работает.   -  person Pål Brattberg    schedule 12.05.2011


Ответы (6)


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

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

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

person Tim Long    schedule 13.08.2012

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

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

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

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

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

person newguy    schedule 13.05.2011
comment
Что такое «модуль» в этом контексте? - person KomodoDave; 10.09.2012
comment
@KomodoDave он говорит о модулях maven. - person GreenGiant; 14.11.2012

Я думаю, что нашел решение, по крайней мере, это сработало для меня: щелкните правой кнопкой мыши проект и выберите «Maven» -> «Обновить зависимости».

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

person Kumar Manish    schedule 09.06.2011

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

  1. Измените папку вывода для тестовых классов.
  2. Создайте собственный конструктор для проекта, который будет запускать тестовую компиляцию из Maven.
  3. Переместите зависимости Maven выше в списке Порядок и Экспорт в пути сборки проекта.

Их было много, намного больше, но я обнаружил, что работает следующее:

  1. Закройте среду разработки.
  2. Удалите jar-файлы, используемые проектом, из моего локального репозитория Maven.
  3. Откройте IDE.
  4. Постройте проект.
  5. Запустите тест.

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

person gffny    schedule 17.05.2013
comment
Можете ли вы рассказать, как вы удалили банки, используемые проектом, из локального репозитория maven? - person MarkJ; 06.02.2019

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

  1. Выберите свой проект.
  2. Щелкните параметр проекта, отображаемый на панели инструментов в Eclipse IDE.
  3. Выберите «чистый».
  4. Теперь попробуйте запустить тестовый файл.
person user5259110    schedule 24.08.2015

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

person artbristol    schedule 12.05.2011
comment
Не повезло. На самом деле я пробовал более 20 обходных путей, но исключение все еще существует - person newguy; 13.05.2011