java.lang.NoClassDefFoundError: org / hamcrest / SelfDescribing

110

En exécutant le junittest eclipse, j'obtiens ceci Exception:

java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

J'ai ajouté un junit.jarfichier de bibliothèque.

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

Comment résoudre cette exception?

utilisateur2013948
la source
Selon votre description, junit.jarn'est pas lié au problème
Andremoniy
1
Dans le harcrestbocal, la hiérarchie est-elle la même? comme dans org > hamcrest > SelfDescribing, ou est-il dans le dossier racine du fichier jar?
Danyel
1
cette erreur n'est peut-être pas pour junit jar, peut-être que quelque chose dans votre projet a besoin d'un autre jar, voici quelques org.hamcrest.SelfDescribing - versions connues
jdurango
1
Merci mais je n'ai rien d'autre dans le projet, j'ai créé ce nouveau projet.
user2013948

Réponses:

92

Ajoutez hamcrest-all-X.X.jarà votre chemin de classe .

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

Jiacai Liu
la source
2
Comment puis-je l'ajouter à classpath ou vérifier s'il est ajouté ou non?
Tomáš Zato - Réintégrer Monica le
D'accord, comment faire cela aurait été utile. Heureusement, le commentaire ci-dessous l'avait.
MarkII
@ TomášZato d'abord: vérifiez le fichier. c'est hamcrest-all (il est important d'avoir tout ). Dans Idea-IDEs, une dépendance est ajoutée 1. copiez / collez le fichier dans le dossier libs (ou n'importe où ailleurs) 2. cliquez avec le bouton droit sur le fichier "ajouter en tant que bibliothèque" 3. vérifiez vos déclarations d'importation dans vos fichiers .java.
Martin Pfeffer
hamcrest-all-X.X.jarest suffisant alors que beaucoup plus petit.
Elist
1
Fichier --- Structure du projet --- Bibliothèques --- '+' --- Java --- .... jar (vous avez téléchargé) --- OK, il apparaîtra dans la "bibliothèque externe".
Simon Z.
56

Selon le site Web de l'équipe JUnit GitHub ( https://github.com/junit-team/junit/wiki/Download-and-Install ), junit.jaret hamcrest-core.jarsont 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>
jkwuc89
la source
Je suis confronté à cela en juin 5 bien que cela soit censé fonctionner sans cela
Nikhil Sahu
22

Quelques étapes à suivre:

  1. Faites un clic droit sur le projet.
  2. Choisissez Build Path puis dans son menu choisissez Add Libraries.
  3. Choisissez JUnit puis cliquez sur Suivant.
  4. Choisissez JUnit4 puis Terminer.
Muhammed Refaat
la source
1
Cela a réglé le problème pour moi. Pour quelqu'un qui n'est pas habitué à utiliser java / Eclipse, cela a été extrêmement utile. Je voulais également mentionner que les laboratoires fournis par mon instructeur pour la classe avaient une version de Junit (3 peut-être) qui ne fonctionnait pas avec mon laboratoire / version d'Eclipse. J'ai dû l'enlever et en ajouter 4 et tout va bien maintenant. Merci beaucoup.
Tony
Cela ne fonctionne pas lorsque vous exécutez la génération à l'aide de l'invite de commande. Ceci est une solution uniquement "IDE".
Partha
16

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>

Le fichier .iml final est donc:

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

PS: enregistrez le fichier et ne laissez pas IntelliJ Idea le recharger. Juste une fois.

CLIENT
la source
Super génial !! M'aide avec mon projet actuel.
MarkII
4

Vous avez besoin de junit-dep.jar car le junit.jar a une copie des anciennes classes Hamcrest.

Stefan Birkner
la source
3

Ce problème est dû à votre chemin de classe miss hamcrest-core-1.3.jar. Pour résoudre ce problème, ajoutez hamcrest-core-1.3.jar lorsque vous ajoutez junit-4.XX.jar dans votre chemin de classe.

Au début, je rencontre aussi ce problème, mais après avoir consulté le site officiel et ajouté hamcrest-core-1.3.jar dans le chemin de classe avec la ligne de commande, cela fonctionne enfin 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
Saint
la source
2

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

Ryan Stewart
la source
2

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

Michael Ogala
la source
Merci, cela fonctionne pour moi. J'avais déjà la bibliothèque JUnit mais il me manquait le Hamcrest.
S. Mayol
1

Cela ressemble à un problème de chemin de classe, il y a donc plusieurs façons de procéder. D'où vient org / hamcret / SelfDescribing? Est-ce votre classe ou dans un pot différent?

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

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

Logan
la source
ce n'est pas un problème de classpath car j'ai déjà ajouté le fichier de bibliothèque junit dans le chemin de construction, même dans la bibliothèque junit, il y a une référence à hamcrest, c'est-à-dire C: /devTools/eclipse-SDK-4.2.1-win32-x86_64/eclipse /plugins/org.hamcrest.core.source_1.1.0.v20090501071000.jar
user2013948
merci pour votre réponse, testNG fonctionne bien, on dirait que je vais devoir quitter le junit
user2013948
Je pensais juste que JUnit démarre en fait une nouvelle JVM lorsque vous exécutez quelque chose en tant que test unitaire. Cela signifie qu'il utilise parfois un chemin de classe différent de celui de votre projet. Parfois, pour déboguer ce type de choses, j'imprime le chemin de classe java à partir de mon code, afin que je puisse comparer les différences lors de son exécution. java-tips.org/java-se-tips/java.lang/…
Logan
1

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

Vérifiez l'éditeur de votre plugin.xmlsous- Dependenciesonglet, supprimez le org.junitdes packages importés et ajoutez-le org.junitaux plug-ins requis.

Robert F
la source
1

Le problème est lorsque vous configurez eclipse pour qu'il pointe vers JRE au lieu de JDK . JRE a junit4.jardans le lib/extdossier, mais pas hamcrest.jar:) La solution est donc de vérifier les JRE installés dans Eclipse, de supprimer l'existant et d'en créer un nouveau pointant vers votre JDK .

ACV
la source
1

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, c'est-à-dire le fichier que 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

estudiante
la source
1

Cela se produit lorsque vous exécutez Ant via la 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 le -nouserlibdrapeau. Les dépendances implicites seraient exclues du chemin de classe.

Devendra Sharma
la source
1

Il existe 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>
小 messi
la source
0

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

Mohamed Iyeb Abed Rabou
la source
0

Quelques étapes à suivre:

  • Faites un clic droit sur le projet.
  • Choisissez Build Path, puis dans son menu, choisissez Add Libraries.
  • Choisissez JUnit puis cliquez sur Suivant.
  • Choisissez JUnit4 puis Terminer.

Cela fonctionne pour moi ...

Karthikraja Loganathan
la source