java.lang.NoClassDefFoundError: org / hamcrest / SelfDescribing

При выполнении junit теста в eclipse я получаю Exception:

java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

Я добавил junit.jar файл библиотеки.

Я пробовал разные версии junit.jar: 4.4, 4.8 и т. Д.

Как мне исправить это исключение?


person user2013948    schedule 26.01.2013    source источник
comment
Судя по вашему описанию, junit.jar не имеет отношения к проблеме   -  person Andremoniy    schedule 26.01.2013
comment
В harcrest банке такая же иерархия? как в org > hamcrest > SelfDescribing, или он находится в корневой папке баночки?   -  person Danyel    schedule 26.01.2013
comment
stackoverflow.com/questions/1171264/   -  person Perception    schedule 26.01.2013
comment
эта ошибка может быть не для junit jar, возможно, что-то в вашем проекте нуждается в другом jar, здесь есть несколько org.hamcrest.SelfDescribing - известные версии   -  person jdurango    schedule 26.01.2013
comment
Спасибо, но у меня в проекте больше ничего нет, я создал этот новый проект.   -  person user2013948    schedule 27.01.2013
comment
да это по тому же пути junit-4.8 \ org \ hamcrest   -  person user2013948    schedule 27.01.2013
comment
его странные тесты работают в IntelliJ и в eclipse с TestNG, junit балуется со мной :)   -  person user2013948    schedule 27.01.2013
comment
было то же самое в netbeans, сначала убедитесь, что тесты находятся в тестовых пакетах (вероятно, странность IDE). Затем убедитесь, что hamcrest и junit находятся в тестовых библиотеках.   -  person MrMesees    schedule 29.09.2017


Ответы (20)


Добавьте 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=

person Jiacai Liu    schedule 28.09.2013
comment
Как я могу добавить его в путь к классам или проверить, добавлен он или нет? - person Tomáš Zato - Reinstate Monica; 04.04.2015
comment
Договорились, как это сделать, было бы полезно. К счастью, в комментарии ниже это было. - person MarkII; 15.11.2015
comment
@ TomášZato сначала: проверьте файл. это хамкрест-все (важно получить все). В Idea-IDE добавляется зависимость 1. скопируйте / вставьте файл в папку libs (или где-нибудь еще) 2. щелкните правой кнопкой мыши файл добавить как библиотеку 3. проверьте операторы импорта в ваших .java-файлах. - person Martin Pfeffer; 02.04.2017
comment
hamcrest-all-X.X.jar достаточно, но намного меньше. - person Elist; 26.11.2017
comment
Файл --- Структура проекта --- Библиотеки --- '+' --- Java --- .... jar (вы скачали) --- Хорошо, это будет отображаться во "внешней библиотеке". - person Simon Z.; 16.05.2019

Согласно веб-сайту группы 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>
person jkwuc89    schedule 20.12.2013
comment
Я столкнулся с этим в Junit 5, хотя он должен работать без него - person Nikhil Sahu; 08.04.2019

Вам необходимо выполнить несколько шагов:

  1. Щелкните проект правой кнопкой мыши.
  2. Выберите «Путь сборки», затем в его меню выберите «Добавить библиотеки».
  3. Выберите JUnit, затем нажмите Далее.
  4. Выберите JUnit4, затем Готово.
person Muhammed Refaat    schedule 23.06.2013
comment
Это исправило это для меня. Для тех, кто не привык использовать java / Eclipse, это было чрезвычайно полезно. Я также хотел упомянуть, что в лабораторных работах, предоставленных моим инструктором для этого класса, была версия Junit (возможно, 3), которая не работала с моей лабораторией / версией Eclipse. Мне пришлось удалить его и добавить 4, и теперь все в порядке. Большое спасибо. - person Tony; 19.07.2014
comment
Это не работает, когда вы запускаете сборку из командной строки. Это решение только для IDE. - person Partha; 28.02.2019

У меня работает: 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>

By:

  <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 перезагружать его. Только раз.

person GUEST    schedule 09.04.2014
comment
Супер классный!! Помогает мне с моим текущим проектом. - person MarkII; 15.11.2015

Вам нужен junit-dep.jar, потому что в junit.jar есть копия старых классов Hamcrest.

person Stefan Birkner    schedule 27.01.2013
comment
где эта банка? - person Nathan B; 26.11.2020

На всякий случай, если кто-то здесь использует netbeans и имеет ту же проблему, все, что вам нужно сделать, это

  • Щелкните правой кнопкой мыши TestLibraries.
  • Нажмите на Добавить библиотеку.
  • Выберите JUnit и нажмите добавить библиотеку.
  • Повторите процесс, но на этот раз нажмите Hamcrest и нажмите кнопку добавления библиотеки.

Это должно решить проблему

person Michael Ogala    schedule 28.10.2016
comment
Спасибо, у меня это работает. У меня уже была библиотека JUnit, но мне не хватало Hamcrest. - person S. Mayol; 07.04.2017

Эта проблема связана с тем, что ваш путь к классам пропущен hamcrest-core-1.3.jar. Чтобы решить эту проблему, добавьте hamcrest-core-1.3.jar при добавлении junit-4.XX.jar в свой путь к классам.

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

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
person Saint    schedule 08.06.2017

Вам необходимо добавить JAR-файл hamcrest-core в путь к классам, как описано здесь: https://github.com/junit-team/junit4/wiki/Download-and-Install

person ayush agrahari    schedule 28.07.2018

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

person Ryan Stewart    schedule 27.01.2013

Самый простой способ решить проблему для начала - скопировать последнюю версию hamcrest-code.jar в ваш CLASSPATH, который является файлом, в котором вы храните другие файлы .jar, необходимые для компиляции и запуска вашего приложения.

это может быть, например: C: / ant / lib

person estudiante    schedule 01.02.2017

Это похоже на проблему с путями к классам, поэтому есть несколько способов решить эту проблему. Откуда взялось org / hamcret / SelfDescribing? Это твой класс или в другой банке?

Попробуйте перейти к пути сборки вашего проекта и на вкладке «Библиотеки» добавьте библиотеку. Вы должны иметь возможность выбрать JUnit для своего проекта. Это немного отличается от простого наличия jar-файла JUnit в вашем проекте.

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

person Logan    schedule 26.01.2013
comment
это не проблема пути к классам, поскольку я уже добавил файл библиотеки junit в путь сборки, даже в библиотеке junit есть ссылка на hamcrest, то есть C: /devTools/eclipse-SDK-4.2.1-win32-x86_64/eclipse /plugins/org.hamcrest.core.source_1.1.0.v20090501071000.jar - person user2013948; 27.01.2013
comment
спасибо за ответ, testNG работает нормально, похоже, мне придется выйти на junit - person user2013948; 27.01.2013
comment
Я просто подумал, что JUnit действительно запускает новую JVM, когда вы запускаете что-то в качестве модульного теста. Это означает, что иногда он использует другой путь к классам, чем ваш проект. Иногда для отладки такого рода вещей я распечатываю путь к классу java из своего кода, чтобы я мог сравнить различия при его выполнении. java-tips.org/ java-se-tips / java.lang / - person Logan; 27.01.2013

Если эта проблема возникает в проекте RCP, это может быть потому, что JUnit был явно импортирован.

Проверьте редактор для своего plugin.xml на вкладке Dependencies, удалите org.junit из импортированных пакетов и добавьте org.junit в обязательные подключаемые модули.

person Robert F    schedule 12.09.2013

Проблема в том, что вы настраиваете eclipse так, чтобы он указывал на JRE вместо JDK. JRE имеет junit4.jar в папке lib/ext, но не hamcrest.jar :) Итак, решение состоит в том, чтобы проверить установленные JRE в Eclipse, удалить существующий и создать новый, указывающий на ваш JDK.

person ACV    schedule 10.03.2016

Это происходит, когда вы запускаете Ant через командную строку. Неявные пользовательские зависимости добавляются в путь к классам в конце и имеют приоритет над путем к классам, добавленным в проект. Запустите Ant с флагом -nouserlib. Неявные зависимости будут исключены из пути к классам.

person Devendra Sharma    schedule 22.02.2018

Есть лучший ответ для решения этой проблемы. добавить зависимость

<dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-all</artifactId>
    <version>1.3</version>
    <scope>test</scope>
</dependency>
person 小messi    schedule 21.05.2019

Hamcrest-core-1.3.jar, доступный в репозитории maven, устарел.

Загрузите рабочий hamcrest-core-1.3.jar с официальной ссылки на Junit4 github. Если вы хотите загрузить из репозитория maven, используйте последнюю версию hamcrest-XX.jar.

<dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest</artifactId>
    <version>2.2</version>
    <scope>test</scope>
</dependency>
person Niranjan Ghule    schedule 18.10.2020

У меня была такая же проблема, решение - добавить в путь сборки / плагин банку org.hamcrest.core_1xx, вы можете найти ее в eclipse / plugins.

person Mohamed Iyeb Abed Rabou    schedule 17.09.2013

Вам необходимо выполнить несколько шагов:

  • Щелкните проект правой кнопкой мыши.
  • Выберите «Путь сборки», а затем в его меню выберите «Добавить библиотеки».
  • Выберите JUnit, затем нажмите Далее.
  • Выберите JUnit4, затем Готово.

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

person Karthikraja Loganathan    schedule 28.10.2019

java.lang.SecurityException: информация о подписывающей стороне class org.hamcrest.Matchers не совпадает с информацией о подписывающей стороне других классов в том же пакете

Сделайте это: щелкните правой кнопкой мыши свой пакет, выберите «Путь сборки» - ›« Настроить путь сборки ». Перейдите на вкладку« Библиотеки ». Удалите JUnit. Применить и закройте« Готово ».

person Alessandro Alves    schedule 18.02.2021

Попробуйте добавить файлы jar вручную или попробуйте принудительно обновить последнюю версию hamcrest.jar.

person Aashish Solanky    schedule 03.03.2021