Eclipse - java.lang.ClassNotFoundException

При попытке запустить JUnit-Test из Eclipse я получаю "ClassNotFoundException". При запуске "mvn test" с консоли все работает нормально. Кроме того, в Eclipse нет проблем.

Моя структура проекта следующая:

  • родительский проект (pom-упаковка)
    • Веб-проект (военная упаковка - мой JUnit-тест здесь)
    • Проект Flex
    • Проект конфигурации

edit: Как класс не может быть найден? Это простой HelloWorld-приложение без специальных библиотек.

Здесь моя JUnit run-configuration: alt text 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("", ""));
    }
}

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

  • Откройте конфигурацию запуска
  • Нажмите на jUnit-Test, который вы хотите запустить
  • перейдите на вкладку пути к классам
  • Попробуйте добавить папку (нажмите на записи пользователя, нажмите на продвинутый, нажмите "Добавить папки", нажмите "ОК" и найдите папку вывода для тестовых классов (те, которые вы найдете в projektproperties java build path, source))

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

Ответ 3

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

изменить

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

  • размещение maven в bootclasspath ВЫШЕ, что работает jre, или
  • running mvn clean test делает трюк или
  • обновить все ваши проекты eclipse, в результате чего восстановление будет устранено.
  • переход к вашему проекту и выбор Maven- > Update Configuration решают проблему

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

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

Ответ 4

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

Ответ 5

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

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

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

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

Ответ 6

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

Ответ 7

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

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

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

Ответ 8

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

"Привет,

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

Фактическая проблема обнаружила, что eclipse не смог сгенерировать файл класса для java файла, classpath был правильным.

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

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

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

Ответ 9

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

Ответ 10

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

Ответ 11

нажмите project->properties->Java build path->Source и проверьте, что каждая папка src все еще существует или недавно удалена. Исправьте любой недостающий путь или неправильный путь и перестройте и запустите тест. Это устранит проблему.

Ответ 12

Все, что я сделал, это Properties → Java Build Path → Order and Export → Enabled all unchecked boxes → перемещено Junit на всем пути

Ответ 13

Пробовал

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 → test

Ответ 14

Я пробовал все решения на этой странице: обновить проект, перестроить, очистить все проекты, перезапустить Eclipse, повторно импортировать (даже) проекты, перестроить maven и обновить. Ничего не получилось. То, что работа копировала класс в новое имя, которое работает нормально - причудливо, но верно.

Потерпев это некоторое время, я просто исправил его:

  • Через меню Run
  • Выберите Run Configurations
  • Выберите конфигурацию запуска, связанную с вашим unit test.
  • Удаление записи из Run Configuration нажатием на удаление или щелчком по красному X.

Что-то должно быть связано с конфигурацией кэшированного запуска.

Ответ 15

Удаление проекта из eclipse (не с жесткого диска), который в какой-то мере очищает рабочее пространство, и повторное перемещение проекта в eclipse снова сработало для меня.

Ответ 16

Обычно эта проблема возникает при запуске инструмента Java-приложения java, который не может найти файл класса.

В основном в проекте maven мы видим эту проблему из-за проблемы синхронизации Eclipse-Maven. Чтобы решить эту проблему:Maven-> Обновить конфигурацию

Ответ 17

Вы пытались щелкнуть правой кнопкой мыши по корню проекта, выбрав "свойства" и убедиться, что CLASSPATH верен? Если я правильно помню, как вы это делаете.

Что-нибудь о том, как Eclipse запускает модульные тесты, которые требуют, чтобы вы добавляли Junit JAR в среду CLASSPATH особым образом?

Я использую IntelliJ, поэтому у меня нет этих проблем.

Я бы сам проверял Eclipse, но я предпочитаю не иметь его на своем рабочем столе.

Ответ 18

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

@RunWith(SpringJUnit4ClassRunner.class)
public class UserDaoTest {
}

и дайте мне знать, как вы справляетесь с этим.

Убедитесь, что вы также автоматически включили функцию build. Если вы хотите, чтобы ваши тестовые классы были скомпилированы, правильно очистите целевую папку Maven (и любую папку bin, которую может использовать Eclipse). Вы также используете m2eclipse, так как я считаю, что это немного проблематично.

Ответ 19

Решение моей проблемы, которое было похоже: libs были недействительными. Если вы посмотрите в файле .classpath проекта, вы увидите теги classpathentry с ключом/значением kind = "lib". Некоторые из моих были неправильными.

Я не обнаружил этого, пока не отключил параметры проверки. То есть в файлах JSP было так много ошибок и т.д., Что ошибки в classpath не были очевидны (или, возможно, даже отображались). В результате ничего не было скомпилировано в выходные папки назначения, но никаких полезных ошибок в том, почему.

Ответ 20

Меня тоже поразила эта проблема, и мне удалось найти достаточное решение для моего дела. Если ваш проект Eclipse имеет файл .classpath в корне вашего проекта (см. Его в представлении Navigator, а не в представлении обозревателя пакетов), убедитесь, что ваш Maven classpathentry появляется до вашего класса JRE Container classpathentry.

<?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 для переключения Order and Export. Если в вашем проекте есть файл .classpath, и вы изменяете только порядок заказа в пути сборки Java, вы увидите, что на заказ не влияет и проблема будет продолжаться.

И проект- > чистый никогда не повредит вещи после внесения изменений.

Ответ 21

Убедитесь, что ваша конфигурация тестового запуска НЕ ​​содержит следующие строки, ИЛИ попробуйте включить автоматическое управление зависимостью Maven.

<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.maven.ide.eclipse.launchconfig.classpathProvider"/>
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.maven.ide.eclipse.launchconfig.sourcepathProvider"/>

Ответ 22

Укажите правильный JDK из Windows > Предпочтения > Java > Установленный JRE.

Не указывать на jre, указывать на правильный JDK. Я указал на JDK 1.6U29 и обновил проект.

В дальнейшем проблема исчезнет, ​​а тесты jUnit работают нормально.

Спасибо,
-Tapas

Ответ 23

Недавно я столкнулся с той же ошибкой в ​​Eclipse, то есть, Eclipse IDE не смог найти класс Unit test независимо от того, как я изменяю конфигурации. Изучая предыдущие должности здесь и на других веб-сайтах, я дважды проверял и triple проверял путь к классам и исходную информацию и перемещался вверх и вниз по исходной папке и библиотекам как в "Запуск конфигурации", так и в "Путь сборки Java" "config windows", и я также очистил проект и перестроил его, но ни один из трюков не работает для меня. Конкретный Java-проект представляет собой старый скомпилированный проект ANT и содержит множество фляг, включенных в библиотеку Eclipse.

Затем я изменил класс Unit test, чтобы добавить метод main(), и щелкните его правой кнопкой мыши на "Запустить как" приложение Java вместо теста JUnit, и внезапно Eclipse, похоже, проснется и правильно идентифицирует класс. Впоследствии я переключил его обратно на приложение Unit test, и он все еще работает.

Это кажется ошибкой в ​​Eclipse, я предполагаю, что большое количество библиотек ( > 260) может смутить способность JVM найти мой класс JUnit.

Ответ 24

Я пробовал все, что я читал в этом длинном сообщении, и, что невероятно, для меня работала, вместо того, чтобы нажимать на тестовый класс и выбирать Run as JUnit test, нажав на тестовый метод и работая как JUnit test. Я понятия не имею, почему?

Ответ 25

Тест JUnit из внутреннего затмения дал мне также NoClassDefFoundError. Запуск "mvn clean test" из командной строки дал мне следующую ошибку на нескольких баночках: недопустимый заголовок LOC (плохая подпись) Удаление этих банок из локального хранилища m2 и повторное выполнение "mvn clean test" решил мою проблему.

Ответ 26

У меня была та же проблема. Все, что я сделал,

я). Созданные артефакты Eclipse

mvn clean eclipse:eclipse

II). Обновите проект и повторите тест junit. Должен работать нормально.

Ответ 27

Кроме того, DOUBLE-CHECK затмение "Сборка веб-развертывания".

Это можно найти: Свойства проекта- > Сборка развертывания.

Недавно у меня был плагин eclipse, который модифицировал один из моих веб-проектов, и добавил ~ загадочно ~ добавил тестовые каталоги maven/src/test/java,/src/test/resources на сборку развертывания. UGGGG!!!

Вот почему мой проект работал отлично, когда я построил и развернул только прямое maven для tomcat, не ClassNotFoundExceptions... Однако, когда я сделал развертывание через Eclipse, Whammo!! Я начинаю получать ClassNotFoundExceptions, потому что TestCode развертывается.

Эрик

Ответ 28

Это означает, что ваш pom.xml имеет нерешенные проблемы. Открыть решение проблемы решить соответственно. Затем вы сможете успешно запускать тестовые примеры, не встречая при этом исключение classnotfoundexception.

Ответ 29

Изменение порядка артефактов classpath в пути сборки Java разрешило это для меня.

  • Щелкните правой кнопкой мыши по проекту и перейдите к пути создания проекта.
  • Перейдите на вкладку "Заказ и экспорт" и переместите библиотеку системы JRE после источников.

Это должно исправить.

Ответ 30

JUnit 4.4 не поддерживается интеграцией JMockit/JUnit. Только поддерживаются версии 4.5 или новее.