java.lang.NoSuchFieldError: DEF_CONTENT_CHARSET

Я пытаюсь запустить программу Java, и я получаю следующую ошибку во время выполнения. Ошибка показана ниже.

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?

1 ответ

Решение

У вас есть две разные версии httpcore в вашем classpath:

~/.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-файла, но затем, когда у класса запрашивается, он получает другой.

В любом случае, наличие двух версий одной и той же библиотеки в вашем classpath одновременно - просто плохая идея.

Вы также должны убедиться, что используемая версия httpcore соответствует версии используемого вами httpclient. Например, я только что скачал последнюю версию httpclient (4.2.5), и она использует httpcore 4.2.4. Если вы пытаетесь использовать httpclient-4.2 с httpcore-4.1, это может быть несовместимо.

Другие вопросы по тегам