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

이없이 작업을하도록되어 있지만 내가 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.