Eclipse插件(Plugin)开发中的NoClassDefFoundError的解决(2)

来源:互联网 发布:淘宝代卖 编辑:程序博客网 时间:2024/06/04 19:03

开发一个SQL的编辑器插件,扩展名为sql,但运行后,用file -> open file...打开test.sql文件,Activator能够构造,但编辑器打不开,添加调试信息,发现ZSqlEditor类根本没有构造。也没有任何错误信息提示。因此判断错误发生在系统加载插件类的过程中(EclipseJava反射从磁盘动态加载插件的类文件)。

打开runtime workbench下的.log文件,发现Eclipse在加载插件时出现NoClassDefFoundError,如下:

java.lang.NoClassDefFoundError: org/eclipse/jface/text/source/ISourceViewer

但是开发过程中并没有提示错误,打开目标平台设置,org.eclipse.jface.text插件也在列表中选中。

       经过检查发现,开发过程中在project->properties中对org.eclipse.jface.text_3.2.2.r322_v20070104.jar(插件)的引用是定位到磁盘的硬引用。而不是出现在plugin dependencies中,造成了运行时找不到类的错误。解决方法如下:

a)      将这个硬引用删除。

b)      使用plugin manifest编辑器下的dependencies选项卡添加对org.eclipse.jface.text插件的引用。问题解决。(或者在plugin.xml<requires>节中或者在MANIFEST.MFrequire-bundle节中添加对org.eclipse.jface.text插件的引用也可)

 

总结:关于插件开发中,对于第三方类的引用和对于其他插件的引用请参考另一篇文档《Eclipse插件开发中对于Jar包和类文件引用的处理》