| 本帖最后由 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標簽,如下圖: <ignore_js_op>
讀英文,注意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,看下圖: <ignore_js_op>
左側的描述說了“選擇字節碼構建的文件夾和文件” 就是說,你打包的時候,選擇的這些文件才會被加入到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的介紹可以看這里: http://www.ibm.com/developerworks/library/os-ecl-osgiconsole/ 理解了以上,你就掌握了基本的插件調試技能。 |
