開發一個SQL的編輯器插件,擴展名爲sql,但運行後,用file -> open file...打開test.sql文件,Activator能夠構造,但編輯器打不開,添加調試信息,發現ZSqlEditor類根本沒有構造。也沒有任何錯誤信息提示。因此判斷錯誤發生在系統加載插件類的過程中(Eclipse用Java反射從磁盤動態加載插件的類文件)。
打開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.MF的require-bundle節中添加對org.eclipse.jface.text插件的引用也可)
總結:關於插件開發中,對於第三方類的引用和對於其他插件的引用請參考另一篇文檔《Eclipse插件開發中對於Jar包和類文件引用的處理》