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?


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=


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>

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.

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.


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.


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

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.


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


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.


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.


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 .


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


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.


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>

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.


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.