2013-08-15 10 views
7

Java 프로그램을 실행하려고하는데 다음과 같은 런타임 오류가 발생합니다. 아래 오류가 있습니다.java.lang.NoSuchFieldError : DEF_CONTENT_CHARSET

Exception in thread "main" java.lang.NoSuchFieldError: DEF_CONTENT_CHARSET 
    at org.apache.http.impl.client.DefaultHttpClient.setDefaultHttpParams(DefaultHttpClient.java:175) 
    at org.apache.http.impl.client.DefaultHttpClient.createHttpParams(DefaultHttpClient.java:158) 
    at org.apache.http.impl.client.AbstractHttpClient.getParams(AbstractHttpClient.java:448) 
    at org.apache.http.impl.client.AbstractHttpClient.createClientConnectionManager(AbstractHttpClient.java:309) 
    at org.apache.http.impl.client.AbstractHttpClient.getConnectionManager(AbstractHttpClient.java:466) 
    at org.apache.http.impl.client.AbstractHttpClient.createHttpContext(AbstractHttpClient.java:286) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:851) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784) 
    at net.floodlightcontroller.core.internal.PacketStreamerClient.registerForPackets(PacketStreamerClient.java:90) 
    at net.floodlightcontroller.core.internal.PacketStreamerClient.main(PacketStreamerClient.java:51) 

이제 클래스 경로에 추가 한 파일은 다음과 같습니다. "주"java.lang.NoSuchFieldError의 원인은 무엇

export CLASSPATH=$(JARS=(./lib/*.jar); IFS=:; echo "${JARS[*]}") 
export CLASSPATH=$CLASSPATH:~/.m2/repository/org/apache/httpcomponents/httpclient/4.0.1/httpclient-4.0.1.jar 
export CLASSPATH=$CLASSPATH:~/.m2/repository/org/apache/httpcomponents/httpcore/4.0.1/httpcore-4.0.1.jar 
export CLASSPATH=$CLASSPATH:~/.m2/repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar 
export CLASSPAHT=$CLASSPATH:~/ms_thesis/ONOS/httpcore-4.1.jar 
#export CLASSPATH=$CLASSPATH:~/ms_thesis/ONOS/lib/httpclient-4.2.jar 
export CLASSPATH=$CLASSPATH:~/google-gson-2.2.4/gson-2.2.4.jar 

: DEF_CONTENT_CHARSET

내가 그와 같은 http-core-4.1-alpha 다운로드는 findjar.com에서 org/apache/http/params/SyncBasicHttpParams class이 들어있는 항아리입니다. http-core의 해당 버전은 협상 가능하지 않습니다. http-core의 해당 버전과 호환되는 httpclient의 버전을 어떻게 확인할 수 있습니까?

+2

classpath에 두 개의 버전 'httpclient'와'httpcore'가 있습니다. 아마도 이전 버전을 제거해야 할 것입니다 (Maven 저장소에서). – aim

답변

12

당신은 당신의 클래스 경로에 httpcore의 두 가지 버전을 가지고 :

~/.m2/repository/org/apache/httpcomponents/httpcore/4.0.1/httpcore-4.0.1.jar 
~/ms_thesis/ONOS/httpcore-4.1.jar 

을 ... 두 번째는 실제로 귀하의 질문에 따라 CLASSPAHT로 수출되고 있지만. lib 디렉토리에는 무엇이 있는지도 알지 못합니다. 심지어 , 버전이있을 수 있습니다.

주석 클라이언트 외에도 httpclient에는 두 가지 버전이 있습니다. 이 모든 것을 정렬하여 두 라이브러리의 최신 버전을 사용하는 만 사용하는 것이 좋습니다. 내 추측은 실제로 포착되는 것은 httpclient의 한 버전과 httpcore의 한 버전이며 호환되지 않는다는 것입니다. 어느 쪽이든, 아니면 httpcore 안에는 하나의 jar 파일에서 가져온 일부 매니페스트 항목이 있지만 클래스가 다른 항목을 가져 오도록 요청할 때.

어느 쪽이든 한 번에 클래스 경로에 동일한 라이브러리의 두 버전을 갖는 것은 좋지 않은 아이디어입니다.

또한 사용하는 httpcore의 버전이 사용하는 httpclient의 버전에 적합한 지 확인해야합니다. 예를 들어, 방금 최신 버전의 httpclient (4.2.5)를 다운로드했으며 httpcore 4.2.4를 사용합니다. httpclient-4.2를 httpcore-4.1과 함께 사용하려고하면 호환되지 않을 수 있습니다.

+0

위의 업데이트 된 설명을 참조하십시오. – liv2hak

+1

@ liv2hak : SyncBasicHttpParams도 httpcore-4.2.4.jar에 있습니다. 따라서 * alpha * jar 파일을 사용할 필요가 없습니다. 대답에 대한 –

+0

주셔서 감사합니다. 나는 또한 두 가지 버전의 httpcore를 추가했다. – MacDaddy

관련 문제