2013-08-15 4 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) 

Теперь файлы, которые я добавил в путь к классам, следующие.

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 

Что является причиной для "основного" java.lang.NoSuchFieldError: DEF_CONTENT_CHARSET

Я скачал http-core-4.1-alpha как это сосуд, который содержит org/apache/http/params/SyncBasicHttpParams class от findjar.com. Так что версия http-core не подлежит обсуждению. Как мне узнать версию httpclient, совместимую с этой версией http-core?

+2

Вы используете две версии 'httpclient' и' httpcore' в classpath. Вероятно, вы должны удалить старые версии (из репозитория 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, поэтому нет необходимости использовать файл ja * alpha *. –

+0

спасибо за ответ. Я также добавил две разные версии httpcore. – MacDaddy