123 votes

java.lang.NoClassDefFoundError : org/hamcrest/SelfDescribing

En cours d'exécution junit test en eclipse J'obtiens ceci Exception :

java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

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

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

Comment puis-je corriger cette exception ?

107voto

Jiacai Liu Points 196

Ajouter hamcrest-all-X.X.jar à votre Chemin de classe .

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=

62voto

jkwuc89 Points 495

Selon le site GitHub de l'équipe JUnit ( https://github.com/junit-team/junit/wiki/Download-and-Install ), junit.jar y hamcrest-core.jar sont tous deux nécessaires dans le classpath lorsque vous utilisez JUnit 4.11.

Voici le bloc de dépendances 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>

23voto

Muhammed Refaat Points 570

Il y a 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 Finish.

17voto

GUEST Points 21

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

J'ai changé le fichier dans le chemin du projet : [NOM_DE_PROJET].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 .iml final 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. : enregistrez le fichier et ne laissez pas IntelliJ Idea le recharger. Juste une fois.

5voto

Stefan Birkner Points 3080

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X