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?
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=
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>
Quelques étapes à suivre:
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.
Vous avez besoin de junit-dep.jar, car ce dernier contient une copie des anciennes classes de Hamcrest.
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
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
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.
Juste au cas où quelqu'un utiliserait netbeans et aurait le même problème, tout ce que vous avez à faire est
Cela devrait résoudre le problème
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.
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
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.
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.
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.
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>
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.