java.lang.NoClassDefFoundError: org / hamcrest / SelfDescribing

110

Mientras ejecuto la junitprueba eclipse, obtengo esto Exception:

java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

Agregué un junit.jararchivo de biblioteca.

He probado diferentes versiones de junit.jar: 4.4, 4.8, etc.

¿Cómo soluciono esta excepción?

usuario2013948
fuente
Según su descripción, junit.jarno está relacionado con el problema
Andremoniy
1
En el harcrestfrasco, ¿la jerarquía es la misma? como en org > hamcrest > SelfDescribing, o está en la carpeta raíz del frasco?
Danyel
1
este error podría no ser para junit jar, tal vez algo en su proyecto necesite otro jar, aquí hay algunos org.hamcrest.SelfDescribing - versiones conocidas
jdurango
1
Gracias, pero no tengo nada más en el proyecto, he creado este nuevo proyecto.
user2013948

Respuestas:

92

Agregue hamcrest-all-X.X.jara su classpath .

La última versión de febrero de 2015 es 1.3: http://code.google.com/p/hamcrest/downloads/detail?name=hamcrest-all-1.3.jar&can=2&q=

Jiacai Liu
fuente
2
¿Cómo puedo agregarlo a classpath o verificar si está agregado o no?
Tomáš Zato - Reincorporación a Monica
De acuerdo, habría sido útil saber cómo hacerlo. Afortunadamente el comentario a continuación lo tenía.
MarkII
@ TomášZato primero: verifique el archivo. es hamcrest-all (es importante conseguirlo todo ). En Idea-IDE se agrega una dependencia 1. Copie / pegue el archivo en la carpeta libs (o en cualquier otro lugar) 2. Haga clic derecho en el archivo "agregar como biblioteca" 3. Verifique sus declaraciones de importación en sus archivos .java.
Martin Pfeffer
hamcrest-all-X.X.jares suficiente aunque mucho más pequeño.
Elist
1
Archivo --- Estructura del proyecto --- Bibliotecas --- '+' --- Java --- .... jar (ha descargado) --- De acuerdo, se mostrará en la 'biblioteca externa'.
Simon Z.16 de
56

Según el sitio web del equipo JUnit GitHub ( https://github.com/junit-team/junit/wiki/Download-and-Install ), junit.jary hamcrest-core.jarambos son necesarios en la ruta de clase cuando se usa JUnit 4.11.

Aquí está el bloque de dependencia de Maven para incluir junit y 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
fuente
Me enfrento a esto en junio 5, aunque se supone que funciona sin él
Nikhil Sahu
22

Algunos pasos que debes seguir:

  1. Haz clic derecho en el proyecto.
  2. Elija Build Path Luego, en su menú, elija Add Libraries.
  3. Elija JUnit y luego haga clic en Siguiente.
  4. Elija JUnit4 y luego Finalizar.
Muhammed Refaat
fuente
1
Esto me lo arregló. Para alguien que no está acostumbrado a usar java / Eclipse, esto fue extremadamente útil. También quería mencionar que los laboratorios proporcionados por mi instructor para la clase tenían una versión de Junit (3 tal vez) que no funcionaba con mi Lab / versión de Eclipse. Tuve que quitarlo y agregar 4 y todo está bien ahora. Muchas gracias.
Tony
Esto no funciona cuando está ejecutando la compilación usando el símbolo del sistema. Esta es una única solución "IDE".
Partha
16

Funciona para mí: IntelliJ IDEA 13.1.1, JUnit4, Java 6

Cambié el archivo en la ruta del proyecto: [PROJECT_NAME] .iml

Sustituido:

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

Por:

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

Entonces, el archivo .iml final es:

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

PD: guarde el archivo y no permita que IntelliJ Idea lo vuelva a cargar. Sólo una vez.

INVITADO
fuente
¡¡Súper asombroso!! Me ayuda con mi proyecto actual.
MarkII
4

Necesita junit-dep.jar porque junit.jar tiene una copia de las antiguas clases de Hamcrest.

Stefan Birkner
fuente
3

Este problema se debe a que su ruta de clases se pierde hamcrest-core-1.3.jar. Para resolver esto, agregue hamcrest-core-1.3.jar a medida que agrega junit-4.XX.jar en su classpath.

Al principio, también me encuentro con este problema, pero después de consultar el sitio oficial y agregar hamcrest-core-1.3.jar en classpath con la línea de comando, finalmente funciona correctamente.

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
Santo
fuente
2

Como regla general, asegúrese siempre de que hamcrest esté antes que cualquier otra biblioteca de prueba en la ruta de clases, ya que muchas de estas bibliotecas incluyen clases de hamcrest y, por lo tanto, pueden entrar en conflicto con la versión de hamcrest que está utilizando. Esto resolverá la mayoría de los problemas del tipo que está describiendo.

Ryan Stewart
fuente
2

En caso de que haya alguien aquí usando netbeans y tenga el mismo problema, todo lo que tiene que hacer es

  • Haga clic derecho en TestLibraries
  • Haga clic en Agregar biblioteca
  • Seleccione JUnit y haga clic en agregar biblioteca
  • Repita el proceso, pero esta vez haga clic en Hamcrest y luego haga clic en agregar biblioteca

esto deberia resolver el problema

Michael Ogala
fuente
Gracias, esto funciona para mí. Ya tenía la biblioteca JUnit pero me faltaba Hamcrest.
S. Mayol
1

Parece un problema de classpath, por lo que hay algunas formas diferentes de solucionarlo. ¿De dónde viene org / hamcret / SelfDescribing? ¿Esa es tu clase o en un frasco diferente?

Intente ir a la ruta de compilación de su proyecto y en la pestaña Bibliotecas, agregue una biblioteca. Debería poder elegir JUnit para su proyecto. Esto es un poco diferente a tener el archivo jar JUnit en su proyecto.

En su Configuración de ejecución para la prueba JUnit, verifique Classpath. Probablemente podría arreglar esto agregando asegurarse de que su Classpath pueda ver esa clase SelfDescribing allí. La opción Ejecutar en Eclipse tiene un conjunto diferente de opciones para las opciones de JUnit.

Logan
fuente
no es un problema de classpath, ya que ya agregué el archivo de la biblioteca junit en la ruta de compilación, incluso en la biblioteca junit hay una referencia a hamcrest, es decir, C: /devTools/eclipse-SDK-4.2.1-win32-x86_64/eclipse /plugins/org.hamcrest.core.source_1.1.0.v20090501071000.jar
user2013948
gracias por su respuesta, testNG está funcionando bien, parece que tendré que salir el junit
user2013948
Estaba pensando que JUnit realmente inicia una nueva JVM cuando ejecuta algo como una prueba unitaria. Eso significa que a veces usa una ruta de clase diferente a la de su proyecto. A veces, para depurar este tipo de cosas, imprimo la ruta de clases de Java desde mi código, para poder comparar las diferencias cuando se ejecuta. java-tips.org/java-se-tips/java.lang/…
Logan
1

Si este problema surge en un proyecto RCP, puede deberse a que JUnit se ha importado explícitamente.

Verifique el editor de su pestaña plugin.xmlinferior Dependencies, elimine el org.junitde los Paquetes importados y agréguelo org.junita los Complementos requeridos.

Robert F
fuente
1

El problema es cuando configura eclipse para que apunte a JRE en lugar de JDK . JRE tiene junit4.jaren la lib/extcarpeta, pero no hamcrest.jar:) Entonces, la solución es verificar los JRE instalados en Eclipse, eliminar el existente y crear uno nuevo que apunte a su JDK .

ACV
fuente
1

La forma más sencilla de resolver el problema, para empezar, es copiar la última versión de hamcrest-code.jar en su CLASSPATH, que es el archivo en el que almacena otros archivos .jar necesarios para la compilación y ejecución de su aplicación.

que podría ser, por ejemplo: C: / ant / lib

estudiante
fuente
1

Esto sucede cuando ejecuta Ant a través de la línea de comandos. Las dependencias de usuario implícitas se agregan en la ruta de clases al final y tienen prioridad sobre la ruta de clases agregada por el proyecto. Ejecuta Ant con -nouserlibbandera. Las dependencias implícitas se excluirían del classpath.

Devendra Sharma
fuente
1

Existe una mejor respuesta para resolver este problema. agregar dependencia

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

Tuve el mismo problema, la solución es agregar en la ruta de compilación / complemento el jar org.hamcrest.core_1xx, puede encontrarlo en eclipse / complementos.

Mohamed Iyeb Abed Rabou
fuente
0

Algunos pasos que debes seguir:

  • Haz clic derecho en el proyecto.
  • Elija Build Path y luego desde su menú elija Add Libraries.
  • Elija JUnit y luego haga clic en Siguiente.
  • Elija JUnit4 y luego Finalizar.

Esto funciona para mí ...

Karthikraja Loganathan
fuente