本帖最後由 anrainie 于 2013-7-23 11:31 編輯
對于eclipse插件開發的新手,經常會遇到插件寫好了,拷貝到plugins或dropins檔案下,但是沒有生效。上網各種問,也很難找到正确的答案。
事實上,自己現場處理,會更快的得到答案,和提高自己解決問題的能力。
現在我說下一下如何應用一個插件:
1、在插件環境下測試。
選擇debug按鈕下的run Configuration(調試 配置),選中Argument。讀一下英文,就可以明白這裡是配置虛拟機和eclipse的啟動參數,後面我會說明在“應用環境”下要怎麼使用這些參數
<ignore_js_op>

在program arguments中加入兩個參數:
-console 打開控制台
-consoleLog 控制台列印Log資訊
這兩個都是給你調試用的,請養成使用控制台的習慣。
配置好之後,選擇Plugin-in标簽,如下圖:
讀英文,注意Launch with,如果你是新手,推薦選擇all workspace and enable target plug-in
這樣就會加載所有的插件,自然包括你寫的那個。
選擇之後,點選下面的debug(調試)按鈕
看效果。
注意!我上面強調了兩次讀英文,英語是程式設計需要的基本能力,eclipse又是一個說明很詳細的IDE,事實上,你能在網上找到的大部分教程内容,都不一定比eclipse自帶的Help Contents詳細。養成良好的程式設計習慣,先把UI上提供的東西都讀一遍,再決定是不是要“搜尋”或者“問”。
2、在應用環境下使用通過了上一步測試的插件
要确定幾點:
a、你的開發環境和你的應用環境是不是一緻?
b、你是不是已經打包了好所有你需要的資源?
如何檢查呢?
其實都是一些配置資訊。主要是檢查兩個檔案:manifest.mf和build.properties。某些特殊情況下可能還要檢查plugin.xml,暫不讨論。
eclipse提供了完整的配置工具。
首先是build,看下圖:
左側的描述說了“選擇位元組碼建構的檔案夾和檔案”
就是說,你打包的時候,選擇的這些檔案才會被加入到jar中去。
是以,如果你添加了lib或者其他的配置檔案什麼的,請不要忘記在build中選上。
然後是manifest.mf。
這裡聲明了本插件依賴的包和插件,本插件開放的包(其中可以含有各種限制規則,暫不讨論),本插件的jre環境,基本的插件資訊,等等。
這裡要注意的是你的“開發環境”具備的包和插件,在你的“應用環境”上是不是具備?
主要是三個:
1、依賴的包 Require-Bundle:
2、依賴的插件 Import-Package:
3、jre版本 Bundle-RequiredExecutionEnvironment:
解決方式是:為應用環境添加上所有缺失的插件。
當然,80%的環境錯誤,都是版本不一緻導緻的
你可以嘗試去掉或修改版本資訊
比如Require-Bundle: org.eclipse.ui.ide;bundle-version="3.6.1"
修改為Require-Bundle: org.eclipse.ui.ide
又比如:
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
換成
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
3、在應用環境下背景調試
當你把插件拷貝到應用環境的plugins或者dropins下面後,你再也沒辦法對它debug了。
如果一個插件加載不成功,它的加載資訊會顯示在.configuration的log檔案中,且,在Help-> About Eclipse裡也會有全部的已安裝插件資訊。
但是,這樣就足夠了嗎?
一個插件,沒有産生效果,又沒有具體的報錯,不知道安裝好了沒有,我們還有任何辦法嗎?
答案當然是肯定的。
我們需要利用osgi(equinox)的背景console。
記得之前我說的Eclipse啟動參數-console嗎?
在應用環境下我們也可以使用該參數,如果你使用的linux,我就不贅述如何添加參數了。
在windows環境下,給Eclipse執行檔案建立一個快捷方式,右鍵屬性,在“目标”裡的檔案後再加上一個-console參數
Eclipse就以console模式啟動了,在Eclipse的splash彈出來的同時,也會彈出一個osgi背景,如下圖:<ignore_js_op>
使用
ss指令可以檢視所有的插件
ss後面可以寫查詢條件
比如
ss org.*
就是找到所有以org.開頭的插件(注意,這裡的名稱插件名稱,而非項目名)
如果能夠找到你需要的插件,則你能看到該插件的ID号。
使用start [id] 指令,可以啟動該插件,看看是否報錯。
注意:在osgi bundle的生命周期中,started和[lazy]才表示它是可以正常使用的
在某些特别的情況下該插件沒有被installed,則你需要install指令來安裝它。
install指令後面的參數需要是一個完整的URL
如果不了解URL格式怎麼寫,請百度之。
更多console的介紹可以看這裡:
<a href="http://www.ibm.com/developerworks/library/os-ecl-osgiconsole/" target="_blank">http://www.ibm.com/developerworks/library/os-ecl-osgiconsole/</a>
了解了以上,你就掌握了基本的插件調試技能。