我知道这个问题已经被提出但是在谷歌上搜索了大约一个小时之后我找不到任何令人信服的解决方案。
我正在使用apache-jena从URL加载RDF模型。我收到IncompatibleClassChangeError
以下消息
Class org.apache.http.impl.client.SystemDefaultHttpClient does not implement the requested interface org.apache.http.client.HttpClient
有人可以给出一些指针我如何解决这个错误。
此致 阿赫桑
答案 0 :(得分:1)
当某些类定义发生不兼容的类更改时,抛出此异常。一些类的定义(当前正在执行的方法所依赖的)已经发生了变化。它通常在基类的非final字段变为静态时,或者当基类变为接口(反之亦然)等时抛出。 IncompatibleClassChangeError扩展了LinkageError,它与从编译子类后更改的基类引发的问题有关。
请在此处阅读更多内容
新打包的库与旧版本不具有向后二进制兼容(BC)。因此,一些未重新编译的库客户端可能会抛出异常。
这是Java库API中的更改的完整列表,如果它们在新版本上运行(即破坏BC),则可能导致使用旧版本库构建的客户端抛出java.lang.IncompatibleClassChangeError:
非最终字段变为静态, 非常数场变为非静态, 类成为接口, 界面变成了类, 如果向类/接口添加新字段(或添加新的超类/超级接口),则来自客户端类C的超级接口的静态字段可能隐藏从中继承的添加字段(具有相同名称)超级C(非常罕见的情况)。 注意:由于其他不兼容的更改而导致许多其他异常:NoSuchFieldError,NoSuchMethodError,IllegalAccessError,InstantiationError,VerifyError,NoClassDefFoundError和AbstractMethodError。
关于BC的更好的论文是“发展基于Java的API 2:实现API二进制兼容性”,由JimdesRivières编写。
还有很多自动工具可以检测到这些变化:
JAPI遵守检查工具 clirr japitools 采用SigTest JAPI检查器 使用japi-compliance-checker为您的图书馆(* .jar):
japi-compliance-checker OLD.jar NEW.jar 使用clirr工具:
java -jar clirr-core-0.6-uber.jar -o OLD.jar -n NEW.jar