2015-09-25 2 views
1

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

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

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

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

С уважением Ahsan

+0

Перекомпилируйте все. – EJP

+0

@EJP: сделал это, но все равно не повезло. –

ответ

1

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

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

http://examples.javacodegeeks.com/java-basics/exceptions/java-lang-incompatibleclasschangeerror-how-to-resolve-incompatible-class-change-error/

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

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

Это полный список изменений в библиотеке Java API, которые могут привести к клиентам, построенные со старой версией библиотеки бросить java.lang.IncompatibleClassChangeError, если они работают на новой (т.е. нарушения до н.э.):

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

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

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

Japi-податливость корректор clirr japitools sigtest Japi-шашка Использование Japi-соответствия-проверки для Вашей библиотеки (*. банку):

Japi-соответствия корректор OLD.jar NEW.jar Использование clirr инструмента:

Java -jar clirr-ядро-0,6-uber.jar -o OLD.jar -n NEW.jar

Смежные вопросы