[java] java.lang.NoClassDefFoundError : org / hamcrest / SelfDescribing

junit테스트를 실행하는 동안 eclipse다음 Exception과 같이 표시됩니다 .

java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

junit.jar라이브러리 파일을 추가했습니다 .

나는 junit.jar를 다른 버전을 시도했다 : 4.4, 4.8, 등

이 예외를 어떻게 수정합니까?



답변

클래스 경로에 추가 hamcrest-all-X.X.jar하십시오 .

2015 년 2 월 현재 최신 버전은 1.3입니다.
http://code.google.com/p/hamcrest/downloads/detail?name=hamcrest-all-1.3.jar&can=2&q=


답변

의 JUnit GitHub의 팀 웹 사이트 (에 따르면 https://github.com/junit-team/junit/wiki/Download-and-Install ), junit.jarhamcrest-core.jarJUnit을 4.11를 사용하는 경우 모두 클래스 경로에 필요하다.

다음은 junit 및 hamcrest를 포함하는 Maven 종속성 블록입니다.

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


답변

따라야 할 몇 가지 단계 :

  1. 프로젝트를 마우스 오른쪽 버튼으로 클릭하십시오.
  2. 빌드 경로를 선택한 다음 메뉴에서 라이브러리 추가를 선택합니다.
  3. JUnit을 선택한 후 다음을 클릭하십시오.
  4. JUnit4를 선택한 다음 마침을 선택합니다.

답변

나를 위해 작동 : IntelliJ IDEA 13.1.1, JUnit4, Java 6

프로젝트 경로 [PROJECT_NAME] .iml에서 파일을 변경했습니다.

교체 됨 :

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

따라서 최종 .iml 파일은 다음과 같습니다.

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

추신 : 파일을 저장하고 IntelliJ Idea가 다시로드하지 않도록하십시오. 딱 한번.


답변

junit.jar에는 이전 Hamcrest 클래스의 사본이 있으므로 junit-dep.jar이 필요합니다.


답변

이 문제는 classpath miss hamcrest-core-1.3.jar 때문입니다. 이 문제를 해결하려면 클래스 경로에 junit-4.XX.jar를 추가 할 때 hamcrest-core-1.3.jar를 추가하십시오.

처음에는이 문제도 발생하지만 공식 사이트를 참조하여 hamcrest-core-1.3.jar을 명령 줄을 사용하여 classpath에 추가하면 마침내 제대로 작동합니다.

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


답변

일반적으로 이러한 라이브러리에는 hamcrest 클래스가 포함되어 있으므로 사용중인 hamcrest 버전과 충돌 할 수 있으므로 항상 hamcrest가 클래스 경로의 다른 테스트 라이브러리보다 먼저 있는지 확인하십시오. 이렇게하면 설명하는 유형의 대부분의 문제가 해결됩니다.