Eclipse - java.lang.ClassNotFoundException

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

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

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

редактировать: как класс не может быть найден? Это простое 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 ответов

Решение

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

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

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

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

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

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

192

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

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

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

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

46

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

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

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

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

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

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

17

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

4

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

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

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

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

3

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

3

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

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

Ура Рамон Бакленд

3

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

"Привет,

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

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

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

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

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

2

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

2

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

2

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

1

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

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

1

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

1

Пытался

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 >> тест

1

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

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

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

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

1

Все, что я сделал, это Свойства -> Путь сборки Java -> Порядок и экспорт -> Включил все непроверенные поля -> Переместил Junit полностью вверх

1

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

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

1

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

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

  1. Через Run меню
  2. Выбрать Run Configurations
  3. Выберите конфигурацию прогона, связанную с вашим модульным тестом.
  4. Удаление записи из Run Configuration нажав удалить или нажав красный X.

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

1

Я тоже столкнулся с этой проблемой и смог найти подходящее решение для моего случая. Если ваш проект Eclipse имеет файл.classpath в корневом каталоге вашего проекта (см. Его в представлении "Навигатор" вместо представления "Проводник пакетов"), убедитесь, что ваш класс MavenPathentry появился до вашего класса JRE Container.

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

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

1

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

В веб-приложениях все файлы.class должны находиться в папке WEB-INF\Classes. если вы используете веб-приложение в Eclipse, пожалуйста, следуйте инструкциям

Шаг 1: Щелкните правой кнопкой мыши папку "Проект" и выберите "Свойства". Шаг 2: Нажмите "Путь сборки Java", вы увидите различные вкладки, такие как "источник", "проекты", "библиотеки" и т. Д. Шаг 3: выберите папку "Исходный код". под этим вы увидите детали вашего проекта. Шаг 4: в папке "Source" вы увидите опцию Default Output Folder. здесь вы должны указать папку классов под WEB-INF. просто укажите путь, например, имя проекта /WebContent/WEB-INF/ классы, структура которых зависит от вашего приложения. Пожалуйста, помните, что вам здесь не нужно создавать папку "classes". Eclipse создаст его для вас. Шаг 5: нажмите "ОК" и выполните чистку и сборку проекта. вот и все ваше приложение будет работать сейчас.

0

Перейдите в "Путь сборки" -> "Исходный код" и переключите на "Да" параметр "Игнорировать дополнительные проблемы компиляции" для всех исходных папок.

0

Это означает, что ваш pom.xml имеет нерешенные проблемы. Откройте окно проблем и решите их соответствующим образом. Тогда вы сможете успешно выполнить тестовые примеры, не встречая исключение classnotfoundexception.

0

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

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

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

0

Убедитесь, что ваша конфигурация запуска теста НЕ содержит следующие строки, ИЛИ попробуйте включить автоматическое управление зависимостями 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"/>
0

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

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

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

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

0

Я вижу Eclipse - java.lang.ClassNotFoundException при запуске тестов Junit. Я удалил один из внешних файлов JAR, который был добавлен в проект. После удаления ссылки этого jar-файла на проект из Eclipse. Я мог бы запустить тесты Junit.

0

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

0

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

0

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

я). Сгенерированные артефакты затмения

mvn clean eclipse:eclipse

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

0

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

0
Другие вопросы по тегам