如何在插件開發中正確使用第三方jar包
問題描述
很多開發人員在eclipse插件開發中,經常會遇到第三方jar包無法訪問的問題,或者是明明在開發環境中一切正常,導出插件到了運行環境時卻出現"NoClassDefFoundError"異常等諸多問題。
本文結合筆者插件開發遇到的問題,談談插件開發過程中應該如何正確配置第三方jar包。
解決過程
在一般插件項目中添加第三方jar包:
1. 創建你的插件項目,並新建一個文件夾放置你需要的第三方jar包,如:<project>/lib。
2. 從文件系統中導入或拷貝jar包至<project>/lib文件夾中,如:<project>/lib/activation.jar。
3. 打開MANIFEST.MF文件,在插件編輯器的"Runtime"Tab頁中,把第三方jar包添加到"Classpath"面板中。
|
|
|
|
haha@sh | 2011年04月21日 13:52 |
配置Feature項目: 我們在做類似這樣的產品時,會創建一個feature項目用來描述所有的插件項目配置信息。如果我們將一個包含第三方類庫jar包的插件導出成一個 jar包的形式,運行產品時不會出現任何問題,可一旦需要在該產品上進行二次插件開發時,則會出現無法訪問插件jar包里的第三方jar包的問題。 在dev.eclipse.org上也搜索到同樣的問題描述,估計是eclipse本身不支持訪問jar包內的jar文件造成的: "Adding lib/my.jar meant the plugin will always be a directory instead of a jar (eclipse doesn't load jars from withing jars). By default, my plugin itself shows up as the "." library, which isn't included in a directory plugin that includes other jars." 因此需要將類似包含第三方jar包的插件 導出成文件夾的形式,具體步驟如下。打開feature.xml文件,在功能編輯器的"Plug-ins"Tab頁,選中想要配置的插件,並 在"Plug-in Details"面板中,選中"Unpack the plug-ins archive after the installation",這樣在插件安裝后會將插件解壓成文件夾形式。 ![]() 對於已經打成jar包的插件,也可以通過手動修改的方式實現。選中一個插件jar文件,解壓成同名文件夾,將類包壓縮成jar文件,如:swt.jar,並刪除原先的類包。 修改META-INF下的MANIFEST.MF文件,如原先內容: Bundle-ClassPath: lib/ktable_2.1.3.jar, . 則改成: Bundle-ClassPath: lib/ktable_2.1.3.jar, swt.jar 即可。 將第三方jar包單獨包裝成一個插件項目: 另外對於項目中使用到大量的第三方jar包時,可以采用eclipse官方推薦的方式,把第三方jar單獨包裝成一個插件項目。 按Ctrl+N,在新建對話框里選擇"Plug-in from existing JAR archives",按下一步選擇你需要的jar文件。 ![]() 再下一步指定這個plugin的名稱,注意這一步里一般要把最下面的"Unzip the JAR archives into the project"選項清除,否則eclipse會把jar文件全部展開為.class文件樹,最后按Finish就可以了。 |