2010-07-12 7 views
12

HttpClient 4.0.1에서 샘플 응용 프로그램을 실행하려고합니다. examples 섹션의 ClientMultiThreadedExecution.java 파일입니다. 클래스 패스에 다음 파일들을 넣었습니다 : apache-mime4j-0.6.jar; commons-codec-1.3.jar; commons-logging-1.1.1.jar; httpclient-4.0.1.jar; httpcore-4.0.1.jar; httpmime-4.0.1.jar 파일이 올바르게 컴파일됩니다. 런타임에 다음 오류가 발생합니다.HttpClient NoClassDefFoundError

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/client/methods/HttpUriRequest 
Caused by: java.lang.ClassNotFoundException: org.apache.http.client.methods.HttpUriRequest 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251) 
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) 

참조가 누락 되었습니까? 그것은 classpath 오류처럼 보이지만 어떤 jar 파일을 포함 시킬지 알 수 없습니까? 당신의 도움에 미리 감사드립니다.

답변

5

이 예외는 런타임 classpath에 언급 된 클래스가 없다는 것을 나타냅니다.

프로그램을 실행하는 방법에 따라 런타임 클래스 경로를 지정하는 방법에는 여러 가지가 있습니다. 괜찮은 IDE가이 모든 것을 투명하게 사용자의 손에서 취했기 때문에 명령 프롬프트에서이 명령을 실행하고 있다고 확신합니다.

java.exe -jar으로 JAR 파일로 실행하거나 파일을 두 번 클릭하는 경우 JAR의 MANIFEST.MF 파일의 Class-Path 항목에 클래스 경로를 지정해야합니다. JAR을 실행할 때마다 %CLASSPATH% 환경 변수와 -cp-classpath 인수는 이 무시됩니다 ().

"일반 바닐라"Java 응용 프로그램으로 java.exe을 실행하는 경우 -cp 또는 -classpath 인수에 지정해야합니다. 이 인수를 사용할 때마다 %CLASSPATH% 환경 변수는 이 무시되고입니다.

어느 쪽이든 classpath는 JAR 파일 경로의 (세미) 콜론 분리 문자열 (절대 경로 또는 현재 작업 디렉토리에 대한 상대 경로)이어야합니다. 예 :

java -cp .;/path/to/file1.jar;/path/to/file2.jar com.example.MyClass

(당신이 유닉스/리눅스에있어 경로 구분자로 콜론 대신 세미콜론을 사용하는 경우)이 수입 범위를 통해 수행 할 수 있습니다 받는다는으로

5

그 클래스는 httpclient-4.0.1.jar에 있습니다. (확실하게 다운로드했습니다) 클래스 패스에 제대로 넣지 않았다고 의심됩니다.

코드를 컴파일하고 실행하는 방법은 무엇입니까?

+0

텍스트 패드 사용. 그것은 JAR 파일과 같은 디렉토리에 있으며 구성에이 파일이 있습니다. $ 파일 -cp.; apache-mime4j-0.6.jar; commons-codec-1.3.jar; commons-logging-1.1.1.jar; httpclient-4.0.1.jar; httpcore-4.0.1.jar; httpmime-4.0.1.jar 잘 컴파일되지만 실행되지 않습니다. – user389753

0

이 문제가 발생했을 때 Fluent API를 Maven 종속성으로 추가하면 이미 사용하고있는 것보다 다른 HTTPClient API 버전이 가져온 것으로 나타났습니다. 두 버전의 API는 결과 JAR의 lib 폴더에 패키지되었습니다. 버전 충돌로 인해이 오류가 발생했습니다.

클래스 패스에 항목을 추가하면 사용할 버전을 수동으로 지정하기 때문에 문제가 해결됩니다. 그러나 근원적 인 문제를 해결하기 위해 필자는 재 구축 (또는 maven clean 실행) 전에 대상 폴더를 삭제해야했습니다. 이렇게하면 "캐시 된"라이브러리 JAR이 제거되고 다음 빌드에서는 올바른 라이브러리 JAR 만 다시 다운로드됩니다.

누군가를 돕는 희망!

1

cloudera-quickstart-vm-5.8 내부에서 Eclipse Luna 2 (4.4.2)를 실행 중입니다.0 나는 다음과 같은

  • 아파치 httpcomponents-httpcore.jar
  • HttpClient를-4.5.3.jar
  • HttpClient를 캐시-4.5.3.jar

을 추가했다 .. . 다음 오류없이 작동