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 към вашия classpath.

Последната версия от февруари 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
Как мога да го добавя към classpath или да проверя дали е добавен или не? - person Tomáš Zato - Reinstate Monica; 04.04.2015
comment
Съгласете се, как да направите това би било полезно. За щастие коментарът по-долу го имаше. - person MarkII; 15.11.2015
comment
@TomášZato първо: проверете файла. това е hamcrest-all (важно е да вземете всичко). В 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. Изберете Build Path След това от неговото меню изберете Add Libraries.
  3. Изберете JUnit, след което щракнете върху Напред.
  4. Изберете JUnit4 и след това Край.
person Muhammed Refaat    schedule 23.06.2013
comment
Това го поправи за мен. За някой, който не е свикнал да използва java/Eclipse, това беше изключително полезно. Също така исках да спомена, че лабораториите, предоставени от моя инструктор за класа, имаха версия на Junit (3 може би), която не работеше с моята Lab/версия на 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 във вашия classpath.

Отначало и аз се сблъсквам с този проблем, но след като се обърнах към официалния сайт и добавете 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
person Saint    schedule 08.06.2017

Трябва да добавите hamcrest-core JAR към classpath, както е описано тук: 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

Звучи като проблем с classpath, така че има няколко различни начина да го направите. Откъде идва org/hamcret/SelfDescribing? Това вашият клас ли е или в друг буркан?

Опитайте да отидете на вашия проект Build Path и в раздела Libraries добавете библиотека. Трябва да можете да изберете JUnit за вашия проект. Това е малко по-различно от това просто да имате JUnit jar файла във вашия проект.

Във вашата конфигурация за изпълнение за теста JUnit проверете Classpath. Вероятно бихте могли да поправите това, като добавите, че вашият Classpath може да види този SelfDescribing клас там. Опцията Run в Eclipse има различен набор от опции за опциите на JUnit.

person Logan    schedule 26.01.2013
comment
това не е проблем на classpath, тъй като вече добавих файл с библиотека 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, когато стартирате нещо като unit test. Това означава, че понякога използва различен класов път от вашия проект. Понякога, за да отстранявам грешки от този тип неща, отпечатвам java classpath от моя код, така че мога да сравня разликите, когато се изпълнява. 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 чрез командния ред. Неявните потребителски зависимости се добавят в classpath в края и имат предимство пред добавения от проекта classpath. Стартирайте 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

Няколко стъпки, които трябва да следвате:

  • Щракнете с десния бутон върху проекта.
  • Изберете Build Path и след това от неговото меню изберете Add Libraries.
  • Изберете JUnit, след което щракнете върху Напред.
  • Изберете JUnit4 и след това Край.

Това работи за мен...

person Karthikraja Loganathan    schedule 28.10.2019

java.lang.SecurityException: информацията за подписващия клас org.hamcrest.Matchers не съвпада с информацията за подписващия на други класове в същия пакет

Направете го: Щракнете с десния бутон върху вашия пакет, щракнете върху Build Path -› Configure Build Path Щракнете върху раздела Libraries Премахнете JUnit Приложете и затворете Ready.

person Alessandro Alves    schedule 18.02.2021

Опитайте да добавите ръчно jar файловете или опитайте с принудителна актуализация с най-новия hamcrest.jar

person Aashish Solanky    schedule 03.03.2021