Ответ 1
Добавьте hamcrest-all-X.X.jar
в свой путь к классам.
Последняя версия с февраля 2015 года составляет 1,3: http://code.google.com/p/hamcrest/downloads/detail?name=hamcrest-all-1.3.jar&can=2&q=
При запуске junit
test в eclipse
я получаю этот Exception
:
java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
Я добавил файл библиотеки junit.jar
.
Я пробовал разные версии junit.jar: 4.4
, 4.8
и т.д.
Как исправить это исключение?
Добавьте hamcrest-all-X.X.jar
в свой путь к классам.
Последняя версия с февраля 2015 года составляет 1,3: http://code.google.com/p/hamcrest/downloads/detail?name=hamcrest-all-1.3.jar&can=2&q=
Согласно сайту команды JUnit GitHub (https://github.com/junit-team/junit/wiki/Download-and-Install), junit.jar
и hamcrest-core.jar
необходимы в пути к классам при использовании JUnit 4.11.
Вот блок зависимости Maven для включения junit и hamcrest.
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.1.2</version>
<scope>test</scope>
</dependency>
<!-- Needed by junit -->
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
Несколько шагов, которые вы должны выполнить:
Работает для меня: IntelliJ IDEA 13.1.1, JUnit4, Java 6
Я изменил файл в пути к проекту: [PROJECT_NAME].iml
Заменены:
<library>
<CLASSES>
<root url="jar://$APPLICATION_HOME_DIR$/lib/junit-4.11.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
По:
<library name="JUnit4">
<CLASSES>
<root url="jar://$APPLICATION_HOME_DIR$/lib/junit-4.11.jar!/" />
<root url="jar://$APPLICATION_HOME_DIR$/lib/hamcrest-core-1.3.jar!/" />
<root url="jar://$APPLICATION_HOME_DIR$/lib/hamcrest-library-1.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
Итак, последний файл .iml:
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/tests" isTestSource="true" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module-library">
<library name="JUnit4">
<CLASSES>
<root url="jar://$APPLICATION_HOME_DIR$/lib/junit-4.11.jar!/" />
<root url="jar://$APPLICATION_HOME_DIR$/lib/hamcrest-core-1.3.jar!/" />
<root url="jar://$APPLICATION_HOME_DIR$/lib/hamcrest-library-1.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
</component>
</module>
P.S.: сохраните файл и не позволяйте IntelliJ Idea перезагрузить его. Только один раз.
Вам нужен junit-dep.jar, потому что junit.jar имеет копию старых классов Hamcrest.
Эта проблема возникает из-за вашего промаха класса hamcrest-core-1.3.jar. Чтобы разрешить это, добавьте hamcrest-core-1.3.jar, когда вы добавите junit-4.XX.jar в свой путь к классам.
Сначала я тоже сталкиваюсь с этой проблемой, но после того, как я ссылаюсь на официальный сайт и добавлю hamcrest-core-1.3.jar в classpath с командной строкой, он работает правильно наконец.
javac -d ../../../../bin/ -cp ~/libs/junit-4.12.jar:/home/limxtop/projects/algorithms/bin MaxHeapTest.java
java -cp ../../../../bin/:/home/limxtop/libs/junit-4.12.jar:/home/limxtop/libs/hamcrest-core-1.3.jar org.junit.runner.JUnitCore com.limxtop.heap.MaxHeapTest
Как правило, всегда убедитесь, что hamcrest находится перед любыми другими библиотеками тестирования в пути к классам, так как многие из таких библиотек включают классы hamcrest и поэтому могут противоречить используемой вами версии hamcrest. Это устранит большинство проблем типа, который вы описываете.
На всякий случай, если кто-то здесь использует netbeans и имеет ту же проблему, все, что вам нужно сделать, это
Это должно решить проблему
Вам нужно добавить JAR файл hamcrest-core в classpath, как описано здесь: https://github.com/junit-team/junit4/wiki/Download-and-Install
Это звучит как проблема с classpath, поэтому есть несколько способов сделать это. Откуда берутся org/hamcret/SelfDescribing? Это ваш класс или в другой банке?
Попробуйте перейти на вкладку "Путь к проекту" и на вкладке "Библиотеки", добавьте библиотеку. Вы должны выбрать JUnit для своего проекта. Это немного отличается от того, что у вас есть файл JUnit jar. В вашем проекте.
В вашей конфигурации запуска для теста JUnit проверьте Classpath. Вероятно, вы могли бы исправить это, добавив, чтобы убедиться, что ваш Classpath может видеть этот класс SelfDescribing. Параметр Run в Eclipse имеет другой набор параметров для параметров JUnit.
Если эта проблема возникает в проекте RCP, это может быть связано с тем, что JUnit был явно импортирован.
Проверьте редактор для plugin.xml
на вкладке Dependencies
, удалите org.junit
из импортированных пакетов и добавьте org.junit
в требуемые подключаемые модули.
Проблема заключается в том, что вы настраиваете затмение на JRE вместо JDK. JRE имеет junit4.jar
в папке lib/ext
, но не hamcrest.jar
:) Итак, решение состоит в проверке установленных JRE в Eclipse, удалении существующего и создании нового, указывающего на ваш JDK.
Самый простой способ решения проблемы - копирование последней версии hamcrest-code.jar в ваш CLASSPATH, который является файлом, в котором хранятся другие .jar файлы, необходимые для компиляции и запуска вашего приложения.
которые могут быть, например,: C:/ ant/lib
Это происходит, когда вы запускаете Ant через командную строку. Неявные пользовательские зависимости добавляются в classpath в конце и имеют приоритет над добавленным проектом classpath. Запустите Ant с флагом -nouserlib
. Неявные зависимости будут исключены из пути к классам.
У меня была та же проблема, решение заключается в добавлении в путь сборки/плагина jar org.hamcrest.core_1xx, вы можете найти его в eclipse/plugins.
Есть лучший ответ, чтобы решить эту проблему. добавить зависимость
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>