上文回顧:定制Eclipse IDE之插件篇(二)
該篇將講述在開發Eclipse 插件過程發生的疑難雜症。不談功能,只說病症。
前言、拿哪個Eclipse作為定制的基礎?
我建議是你用哪個Eclipse做開發,就使用那個Eclipse作為定制的基礎,因為你的插件是在這上面開發的,決對不會出現缺少必要的依賴插件。如果覺得有些插件沒必要的話,也自行刪除。
一、插件存在緩存的現象
在開發插件的時候,有時會存在緩存了上一次運行插件結果的現象。
解決辦法:
1.在run configurations的Eclipse Application里,勾選清除“工作空間”,同時把“清除之前請求確認”勾掉。

二、插件里plugin_customization.ini一直不生效
plugin_customization.ini里面是對Eclipse的一些全局配置。有可能你會在的透視圖插件里指定自己的plugin_customization.ini,但是你會發現總是不生效。
配置如下:
<extension id="BingoTouch" point="org.eclipse.core.runtime.products"> <product application="org.eclipse.ui.ide.workbench" name="%name"> <property name="preferenceCustomization" value="plugin_customization.ini" /> <property name="appName" value="BingoTouch" /> <property name="windowImages" value="icons/eclipse16.png,icons/eclipse32.png" /> <property name="aboutText" value="%aboutText" /> </product> </extension>
原因解析:
其實這個是取決於你的eclipse.exe下的eclipse.ini指定運行的product是什么,打開這個文件我們會看到:
-product
org.eclipse.epp.package.rcp.product
生效的只是這個product下的plugin_customization.ini
解決辦法:
解決辦法有兩種,一是將指定product,指向自己插件(名稱就是自己插件名 + product名)。例如:
-product
com.bingo.ide.perspective.BingoTouch
另外一種是將你要生效的那個plugin_customization.ini覆蓋eclipse\plugins\org.eclipse.epp.package.rcp_4.4.2.20150219-0708 目錄里的plugin_customization.ini(我是用這種方法)。
三、IDE的主題設置一直無效
這個原因跟第二個有些類似,你在插件設置的主題一直無效,例如:
<property name="cssTheme" value="com.appcelerator.titanium.rcp.theme.dashboard"> </property>
原因解析:
還是生效是哪個product的原因
解決辦法:
在指定的product里的plugin.xml,將cssTheme屬性值改為你想要的主題id。
四、導出的插件中文亂碼了
插件顯示中文時候亂碼了,你可能在插件里面偷懶直接寫中文(正常應該是寫在properties文件配置的,中文用unicode編碼)。
原因解析:
插件里面如果有中文的話,你沒有指定編譯編碼。
解決辦法:
直接在build.properties編輯器的"build.properties"編輯頁中,在文件最后添加如下內容(切記兩個點不能少):
javacDefaultEncoding.. = UTF-8
五、插件的控制台輸出在mac上顯示亂碼
插件控制台輸出在window正常,而在mac上顯示亂碼了。
解決辦法:
在mac的eclipse.ini加上:
-Dfile.encoding=UTF-8
六、第二次打開eclipse,工具欄上自己新增的圖標向右偏移了
在第一次打開eclipse時候,自己新增圖標還是正常顯示的,當第二次以后打開eclipse時候,圖標就往右偏移了。
原因解析:
這個可能有不同原因,不過我的這個情況是因為主題使用的原因。 我用了aptana的主題,但在主題的樣式文件里面有
.MToolControl.TrimStack { handle-image: url(chrome://drag-handle?height=22&background-color=#cccccc&embossed=true); }
里面handle-image的url無法訪問,引發的問題。
解決辦法:
將里面的圖標下到本地,換相對路徑就正常了。
.MToolControl.TrimStack { handle-image: url(./dragHandle.png); }
七、直接運行插件生效,導出放到新eclipse沒有效果
這個問題是個致命的問題,而為了這個問題,我花了兩天去檢查(雖然很多的嘗試都是沒有效果,但最終都引導到正確的路上)。
我嘗試用OSGi控制台來檢查問題(因為篇幅問題,我寫在另一篇文章):
Eclipse OSGi調試過程


發現我的插件根本沒有加載到,更別談找錯誤了。
原因解析:
在百思不得其解時候,突然想到一個問題,eclipse是不是本身認不到插件,是否有個地方配置這些插件信息。后來終於被我發現,eclipse/configuration/org.eclipse.equinox.simpleconfigurator/bundles.info
所有啟動插件都在這里定義,那就是我需要將我的插件放到這里。
所有啟動插件都在這里定義,那就是我需要將我的插件放到這里。
解決辦法:
例如:
com.bingo.ide.perspective,1.0.0,dropins/eclipse/plugins/com.bingo.ide.perspective_1.0.0.jar,4,false
我把我的插件信息在這,果然生效了。
相關問題:
這出現另外一個問題,因為我的eclipse插件有90多個(別問我為什么這么多),我不可能一條條信息去定義,生成Bundles.info信息,這樣太蠢了。
於是整理了一個簡單的Java程序去生成。代碼如下:
import java.io.File; /** * 插件生成后,生成Bundles.info * @author lufeng */ public class BuildInfo { final static String exportPluginPath = "F:\\source\\bingo-touch\\ide\\release\\window_64\\eclipse\\dropins\\eclipse\\plugins\\"; final static String pluginPath ="dropins/eclipse/plugins/"; public static void main(String[] args) { File direct = new File(exportPluginPath); File[] files = direct.listFiles(); for(File f : files){ String s = f.getName(); int p = s.lastIndexOf("_"); if(p == -1) continue; String name = s.substring(0, p); String version = s.substring(p+1); if(version != null && !"".equals(version)) version = version.substring(0, version.lastIndexOf(".")); //.jar直接拼接,文件夾形式的后邊加"/" if(f.isDirectory()) s = s+"/"; System.out.println(name+","+version+","+pluginPath +s+",4,false"); } } }
六篇關於我這個月的Eclipse定制就到此為止,希望能幫到人。
本文為原創文章,轉載請保留原出處,方便溯源,如有錯誤地方,謝謝指正。
本文地址 : http://www.cnblogs.com/lovesong/p/4694757.html
本文地址 : http://www.cnblogs.com/lovesong/p/4694757.html