web-dev-qa-db-fra.com

java.lang.NoClassDefFoundError: org / hamcrest / SelfDescribing

Pendant l'exécution de junit test dans Eclipse, je reçois ce Exception:

Java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

J'ai ajouté le fichier de bibliothèque junit.jar.

J'ai essayé différentes versions de junit.jar: 4.4, 4.8, etc.

Comment puis-je réparer cette exception?

103
user2013948

Ajoutez hamcrest-all-X.X.jar à votre classpath .

La dernière version en date de février 2015 est la 1.3: http://code.google.com/p/hamcrest/downloads/detail?name=hamcrest-all-1.3.jar&can=2&q=

85
Jiacai Liu

Selon le site Web de l'équipe JUnit GitHub ( https://github.com/junit-team/junit/wiki/Download-and-Install ), junit.jar et hamcrest-core.jar sont tous deux nécessaires dans le chemin de classe lors de l'utilisation de JUnit 4.11.

Voici le bloc de dépendance Maven pour inclure Junit et 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>
51
jkwuc89

Quelques étapes à suivre:

  1. Faites un clic droit sur le projet.
  2. Choisissez Chemin de construction, puis dans son menu, choisissez Ajouter des bibliothèques.
  3. Choisissez JUnit puis cliquez sur Suivant.
  4. Choisissez JUnit4 puis Terminer.
22
Muhammed Refaat

Fonctionne pour moi: IntelliJ IDEA 13.1.1, JUnit4, Java 6

J'ai changé le fichier dans le chemin du projet: [PROJECT_NAME] .iml

Remplacé:

  <library>
    <CLASSES>
      <root url="jar://$APPLICATION_HOME_DIR$/lib/junit-4.11.jar!/" />
    </CLASSES>
    <JAVADOC />
    <SOURCES />
  </library>

Par:

  <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>

Donc, le fichier final .iml est:

<?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 .: enregistrer le fichier et ne pas laisser à IntelliJ Idea le recharger. Juste une fois.

16
GUEST

Vous avez besoin de junit-dep.jar, car ce dernier contient une copie des anciennes classes de Hamcrest.

4
Stefan Birkner

Ce problème est dû à votre chemin d'accès aux classes miss hamcrest-core-1.3.jar. Pour résoudre ce problème, ajoutez hamcrest-core-1.3.jar en même temps que junit-4.XX.jar dans votre chemin d'accès aux classes.

Au début, je rencontre aussi ce problème, mais après avoir référé à site officiel et ajouté hamcrest-core-1.3.jar dans classpath avec la ligne de commande, cela fonctionne correctement.

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
3
Saint

Vous devez ajouter le fichier JAR hamcrest-core au classpath, comme décrit ci-après: https://github.com/junit-team/junit4/wiki/Download-and-Install

2
ayush agrahari

En règle générale, assurez-vous toujours que hamcrest se trouve avant toute autre bibliothèque de test sur le classpath, car de nombreuses bibliothèques de ce type incluent des classes hamcrest et peuvent donc entrer en conflit avec la version de hamcrest que vous utilisez. Cela résoudra la plupart des problèmes du type que vous décrivez.

2
Ryan Stewart

Juste au cas où quelqu'un utiliserait netbeans et aurait le même problème, tout ce que vous avez à faire est

  • Faites un clic droit sur TestLibraries
  • Cliquez sur Ajouter une bibliothèque
  • Sélectionnez JUnit et cliquez sur Ajouter une bibliothèque.
  • Répétez le processus mais cette fois, cliquez sur Hamcrest et cliquez sur Ajouter une bibliothèque.

Cela devrait résoudre le problème

2
Michael Ogala

Cela se produit lorsque vous exécutez Ant via une ligne de commande. Les dépendances utilisateur implicites sont ajoutées dans le chemin de classe à la fin et ont priorité sur le chemin de classe ajouté au projet. Exécutez Ant avec -nouserlib indicateur. Les dépendances implicites seraient exclues du classpath.

1
Devendra Sharma

le moyen le plus simple de résoudre le problème est de copier la dernière version de hamcrest-code.jar dans votre CLASSPATH, fichier dans lequel vous stockez les autres fichiers .jar nécessaires à la compilation et à l'exécution de votre application.

cela pourrait être par exemple: C:/ant/lib

1
estudiante

Si ce problème survient dans un projet RCP, cela peut être dû au fait que JUnit a été explicitement importé.

Vérifiez l'éditeur pour votre plugin.xml sous l'onglet Dependencies, supprimez le org.junit des packages importés et ajoutez org.junit aux Plug-ins requis.

1
Robert F

Le problème est que vous avez configuré Eclipse pour qu'il pointe vers JRE au lieu de JDK. JRE a junit4.jar dans le dossier lib/ext, mais pas hamcrest.jar :) La solution consiste donc à vérifier les JRE installés dans Eclipse, à en supprimer un et à en créer un nouveau pointant vers votre - JDK.

1
ACV

Cela ressemble à un problème de chemin de classe, il y a donc différentes façons de s'y prendre. D'où viennent org/hamcret/SelfDescribing? Est-ce votre classe ou dans un autre bocal?

Essayez d’accéder au chemin de construction de votre projet et, sous l’onglet Bibliothèques, ajoutez une bibliothèque. Vous devriez pouvoir choisir JUnit pour votre projet. C'est un peu différent de simplement avoir le fichier jar JUnit dans votre projet.

Dans votre configuration d'exécution pour le test JUnit, vérifiez le Classpath. Vous pourriez probablement résoudre ce problème en ajoutant la vérification que votre Classpath peut voir cette classe SelfDescribing. L'option Exécuter dans Eclipse propose un ensemble d'options différent pour les options JUnit.

1
Logan

Il y a une meilleure réponse pour résoudre ce problème. ajouter une dépendance

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

J'ai eu le même problème, la solution consiste à ajouter dans le chemin de construction/plugin le fichier jar org.hamcrest.core_1xx, vous pouvez le trouver dans Eclipse/plugins.

0