首页 > 代码库 > 插件开发,包冲突问题

插件开发,包冲突问题

最近在开发中遇到了一个包冲突问题,在开发的插件C依赖了org.json包。但是在使用时一直报类似如下错误:

java.lang.LinkageError: loader constraint violation: when resolving interface method "package.class.method(JLpackage/class;)Ljava/lang/Object;" the class loader (instance of org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader) of the current class, package/class, and the class loader (instance of org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader) for resolved class, package/class, have different Class objects for the type package/class used in the signature
loader constraint violation: loader (instance of org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader) previously initiated loading for a different type with name

在网上查了下,参考了http://blog.csdn.net/zhuzhenlong998/article/details/7744953这篇文章,文章中说

A依赖B,B引用第三方包,

那么如果C在依赖A,并且引用该第三方包时,就会出现C的classloader加载了第三方包,B的classloader也加载了该第三方包,就会出现包冲突。

但是A/B都是由别的部门提供的现有的插件,我不知道哪个插件引用了org.json,也不可能去改他们的插件,就试着把自己插件的org.json依赖去掉。

OK,插件代码报错,因为缺了org.json引用。

然后,在Imported Packages中加入org.json,插件代码报错消失。

运行程序,正常运行!

插件开发,包冲突问题