java.lang.NoClassDefFoundError : org / hamcrest / SelfDescribing


110

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

java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

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

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

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


당신의 설명에 따르면, junit.jar이 문제와 관련이 없습니다
— Andremoniy

1
에서 harcrest항아리, 계층 구조는 동일합니다? 에서와 같이 org > hamcrest > SelfDescribing또는 항아리의 루트 폴더에 있습니까?
— Danyel 2013 년


1
이 오류는 junit jar가 아닐 수도 있습니다. 프로젝트에 다른 jar가 필요할 수도 있습니다. 여기에는 org.hamcrest.SelfDescribing-알려진 버전
— jdurango

1
감사합니다.하지만 프로젝트에 다른 것이 없습니다.이 새 프로젝트를 만들었습니다.
— user2013948

답변:


92

클래스 경로에 추가 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=


2
클래스 경로에 추가하거나 추가되었는지 여부를 어떻게 확인할 수 있습니까?
— Tomáš Zato-Monica 복원

동의합니다. 그렇게하는 방법이 도움이되었을 것입니다. 다행히도 아래에 댓글이 있습니다.
— MarkII

@ TomášZato 먼저 : 파일을 확인하십시오. 그것은 hamcrest-all입니다 (모든 것을 얻는 것이 중요 합니다 ). Idea-IDE에서 종속성이 추가됩니다. 1. libs 폴더 (또는 다른 곳)에 파일을 복사 / 붙여 넣기 2. "라이브러리로 추가"파일을 마우스 오른쪽 버튼으로 클릭합니다. 3. .java-files에서 가져 오기 문을 확인합니다.
— Martin Pfeffer

hamcrest-all-X.X.jar훨씬 작지만 충분합니다.
— Elist 2011

1
파일 --- 프로젝트 구조 --- 라이브러리 --- '+'--- Java --- .... jar (다운로드했습니다) --- 좋아요, '외부 라이브러리'에 표시됩니다.
— Simon Z.

56

의 JUnit GitHub의 팀 웹 사이트 (에 따르면 https://github.com/junit-team/junit/wiki/Download-and-Install ), junit.jar및 hamcrest-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>

이없이 작업을하도록되어 있지만 내가 Junit와 5이 직면하고
— Nikhil Sahu

22

따라야 할 몇 가지 단계 :

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

1
이것은 나를 위해 그것을 고쳤습니다. Java / Eclipse를 사용하는 데 익숙하지 않은 사람에게는 매우 도움이되었습니다. 또한 강사가 수업을 위해 제공 한 랩에 내 랩 / 버전의 Eclipse에서 작동하지 않는 Junit (3 아마도) 버전이 있음을 언급하고 싶었습니다. 나는 그것을 제거하고 4를 더해야했고 이제는 모두 좋습니다. 감사합니다.
— Tony

명령 프롬프트를 사용하여 빌드를 실행할 때는 작동하지 않습니다. 이것은 "IDE"전용 솔루션입니다.
— Partha

16

나를 위해 작동 : 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가 다시로드하지 않도록하십시오. 딱 한번.


슈퍼 굉장 !! 현재 프로젝트를 도와줍니다.
— MarkII


3

이 문제는 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

2

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


2

여기에 netbeans를 사용하는 사람이 있고 같은 문제가있는 경우를 대비하여해야 할 일은

  • TestLibraries를 마우스 오른쪽 버튼으로 클릭하십시오.
  • 라이브러리 추가를 클릭하십시오.
  • JUnit을 선택하고 라이브러리 추가를 클릭하십시오.
  • 이 과정을 반복하지만 이번에는 Hamcrest를 클릭하고 라이브러리 추가를 클릭하십시오.

이것은 문제를 해결해야합니다


감사합니다.이게 저에게 효과적입니다. 이미 JUnit 라이브러리가 있지만 Hamcrest가 누락되었습니다.
— S. Mayol 2017


1

클래스 경로 문제처럼 들리므로 몇 가지 다른 방법이 있습니다. org / hamcret / SelfDescribing의 출처는 어디입니까? 당신의 수업입니까, 아니면 다른 병에 있습니까?

프로젝트 빌드 경로로 이동하고 라이브러리 탭에서 라이브러리를 추가하십시오. 프로젝트에 JUnit을 선택할 수 있어야합니다. 이것은 프로젝트에 JUnit jar 파일이있는 것과는 약간 다릅니다.

JUnit 테스트를위한 실행 구성에서 클래스 경로를 확인하십시오. Classpath가 SelfDescribing 클래스를 볼 수 있도록 추가하여이 문제를 해결할 수 있습니다. Eclipse의 실행 옵션에는 JUnit 옵션에 대한 다른 옵션 세트가 있습니다.


이미 빌드 경로에 junit 라이브러리 파일을 추가했기 때문에 클래스 경로의 문제가 아닙니다. junit 라이브러리에서도 hamcrest에 대한 참조가 있습니다. 즉 C : /devTools/eclipse-SDK-4.2.1-win32-x86_64/eclipse /plugins/org.hamcrest.core.source_1.1.0.v20090501071000.jar
— user2013948

응답에 대한 감사, TestNG를 내가 같은 외모의 JUnit에 종료해야합니다, 잘 작동한다
— user2013948

나는 JUnit이 실제로 단위 테스트로 무언가를 실행할 때 새로운 JVM을 시작한다고 생각했습니다. 즉, 때때로 프로젝트와 다른 클래스 경로를 사용합니다. 때때로 이러한 유형의 것을 디버깅하기 위해 코드에서 Java 클래스 경로를 인쇄하므로 실행될 때 차이점을 비교할 수 있습니다. java-tips.org/java-se-tips/java.lang/…
— Logan

1

RCP 프로젝트에서이 문제가 발생하면 JUnit을 명시 적으로 가져 왔기 때문일 수 있습니다.

plugin.xml아래 Dependencies탭 의 편집기를 확인하고 org.junit가져온 패키지에서를 제거 org.junit하고 필요한 플러그인에 추가하십시오 .


1

문제는 JDK 대신 JRE 를 가리 키도록 Eclipse를 설정할 때 입니다. JRE는이 에서 폴더가 아닌 솔루션, 이클립스에 설치의 JRE를 확인할 기존 하나를 제거하고에 새 가리키는를 만드는 것입니다 :) 그래서 JDK .junit4.jarlib/exthamcrest.jar


1

문제를 해결하는 가장 간단한 방법은 최신 버전의 hamcrest-code.jar을 응용 프로그램의 컴파일 및 실행에 필요한 다른 .jar 파일을 저장하는 파일 인 CLASSPATH에 복사하는 것입니다.

예 : C : / ant / lib


1

이것은 명령 줄을 통해 Ant를 실행할 때 발생합니다. 암시 적 사용자 종속성은 끝에 클래스 경로에 추가되고 프로젝트에 추가 된 클래스 경로보다 우선합니다. -nouserlib플래그로 Ant를 실행하십시오 . 암시 적 종속성은 클래스 경로에서 제외됩니다.


1

이 문제를 해결하기위한 더 나은 답이 있습니다. 종속성 추가

<dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-all</artifactId>
    <version>1.3</version>
    <scope>test</scope>
</dependency>

0

나는 같은 문제가 있었고 해결책은 빌드 경로 / 플러그인에 jar org.hamcrest.core_1xx를 추가하는 것입니다. 이클립스 / 플러그인에서 찾을 수 있습니다.


0

따라야 할 몇 가지 단계 :

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

이것은 나를 위해 작동합니다 ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.