it-roy-ru.com

Eclipse - Java.lang.ClassNotFoundException

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

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

  • родительский проект (pom-package)
    • Веб-проект (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("", ""));
    }
}
90
swalkner

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

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

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

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

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

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

192
Carlos

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

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

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

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

46
CoffeJunky

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

Правка:

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

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

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

здесь и здесь немного информации

17
akf

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

4
EvilFish

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

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

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

3
Ramon

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

3
Starfox275

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

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

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

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

3
KomodoDave

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

"Привет,

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

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

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

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

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

2
kisna

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

2
wanfke

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

2
Romie

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

1
Siddharth

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

1
Hari Hara Earlapati

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

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

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

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

1
Gray

Пытался  

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
user2246725

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

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

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

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

1
Jon

Я тоже столкнулся с этой проблемой и смог найти подходящее решение для моего случая. Если в вашем проекте 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
cmh

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

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

1
Premraj

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

1
iunknown

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

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

1
Mike

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

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

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

0
Sahitya M

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

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

mvn clean Eclipse:eclipse

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

0
Vikram

Кроме того, дважды проверьте диалоговое окно Eclipse «Web Deployment Assembly». 

Это можно найти: Project Properties-> Deployment Assembly. 

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

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

Эрик

0
Eric Manley

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

0
user7639086

Недавно я столкнулся с той же ошибкой в ​​Eclipse, то есть Eclipse IDE не смог найти класс модульного теста, независимо от того, как я изменял конфигурации. Извлекая уроки из предыдущих постов здесь и на других веб-сайтах, я дважды проверил и трижды проверил информацию о пути к классам и источникам, а также переместился вверх и вниз по исходной папке и библиотекам как в «Run Configuration», так и в «Java Build Path» "окна настройки, и я также очистил проект и перестроил его, но ни один из приемов не работает для меня. Конкретный Java-проект - это старый ANT-скомпилированный проект, включающий множество jar-файлов, включенных в библиотеку Eclipse.

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

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

0
Hongyu Zhang

Пожалуйста, укажите исправление JDK в Windows> «Установки»> «Java»> «Установленный JRE».

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

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

Спасибо,
- Тапас

0
Tapas Adhikary

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

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

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

0
Sai Killi

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

0
Raju Rao

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

0
Mahendra Rathod

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

0
pavelb

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

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

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

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

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

0
duffymo

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

0
snakedog

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

a. I went through properties -> Java Buildpath -> Maven Dependencies and identified the missed libraries. 
b. Removed the missed libraries artifacts from pom.xml
c. Downloaded the libraries and added them explicitly.
0
Hari Krishna

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

0
RutgerDOW