Как решить, что интерфейс IncompatableClassChangeError не реализован

Я знаю, что вопрос уже задан, но почему-то я не могу найти убедительного решения после часа поиска в Google.

Я использую apache-jena для загрузки модели RDF с URL-адреса. И я получаю IncompatibleClassChangeError со следующим сообщением

Class org.apache.http.impl.client.SystemDefaultHttpClient does not implement the requested interface org.apache.http.client.HttpClient

Может кто-нибудь дать какой-нибудь указатель, как я могу решить эту ошибку.

С уважением Ахсан


person Ahsan Iqbal    schedule 25.09.2015    source источник
comment
Перекомпилируйте все.   -  person user207421    schedule 25.09.2015
comment
@EJP: сделал это, но все равно не повезло.   -  person Ahsan Iqbal    schedule 25.09.2015


Ответы (1)


Это вызывается, когда в каком-либо определении класса произошло несовместимое изменение класса. С тех пор изменилось определение некоторого класса, от которого зависит исполняемый в данный момент метод. Обычно он генерируется, когда неконечное поле базового класса становится статическим или когда базовый класс превращается в интерфейс (и наоборот) и т. д. который изменяется после компиляции дочернего класса.

Пожалуйста, прочитайте больше здесь

http: //examples.javacodegeeks.com/java-basics/exceptions/java-lang-inсовместимыйclasschangeerror-как-разрешить-несовместимый-class-change-error/

http://howtodoinjava.com/2013/05/25/solved-java-lang-incompiledclasschangeerror-implementing-class/

Ваша недавно упакованная библиотека не имеет обратной бинарной совместимости (BC) со старой версией. По этой причине некоторые клиенты библиотек, которые не были перекомпилированы, могут генерировать исключение.

Это полный список изменений в API-интерфейсе библиотеки Java, которые могут привести к тому, что клиенты, созданные с использованием старой версии библиотеки, будут выдавать ошибку java.lang.IncompiledClassChangeError, если они будут работать на новой версии (т. е. нарушить BC):

Неконечное поле становится статическим, непостоянное поле становится нестатическим, класс становится интерфейсом, интерфейс становится классом, если вы добавляете новое поле в класс/интерфейс (или добавляете новый суперкласс/суперинтерфейс), то статическое поле от суперинтерфейса клиентского класса C может скрываться добавленное поле (с тем же именем), унаследованное от суперкласса C (очень редкий случай). Примечание. Существует множество других исключений, вызванных другими несовместимыми изменениями: NoSuchFieldError, NoSuchMethodError, IllegalAccessError, InstantiationError, VerifyError, NoClassDefFoundError и AbstractMethodError.

Лучшая статья о BC — «Развитие API-интерфейсов на основе Java 2: достижение двоичной совместимости API», написанная Джимом де Ривьером.

Также существует множество автоматических инструментов для обнаружения таких изменений:

japi-compliance-checker clirr japitools sigtest japi-checker Использование japi-compliance-checker для вашей библиотеки (*.jar):

japi-compliance-checker OLD.jar NEW.jar Использование инструмента clirr:

Java -jar clirr-core-0.6-uber.jar -o СТАРЫЙ.jar -n НОВЫЙ.jar

person Pankaj Saboo    schedule 25.09.2015