前言
很久沒寫文章了,准備寫一系列關於Eclipse RCP /Plugin的文章。 這些文章都是trouble shooting性質的,不准備寫的很細,當你碰到這樣的問題,google到時,能幫你把問題解決了,這就ok了。另外有些問題我也是不求甚解的,哈。
問題描述
在開發RCP程序時,一些引用的plugin會向Perferences中貢獻一些Perference page,如何刪除這些page已經很很多文章介紹了。本文介紹的是,如果我們希望保留某些Perference page,並且把它們合並到其他plugin貢獻的category中去,那該怎么做呢。
比如,如下圖中,希望把SSH2合並到Team類別下去,SSH2可以用於egit進行源代碼管理,所以把它合並到Team中看上去合情合理。
其實需要的技術你可能都會了,只是我們需要創造性的使用它們。
如何刪除一個Perference page或者類別
這是我們需要用到的技術,已經有很多文章介紹了,我這里再簡要介紹下:
1,首先,我們可以通過以下代碼打印根節點下所有的Perference page或者類別的ID:
PreferenceManager pm = PlatformUI.getWorkbench().getPreferenceManager(); IPreferenceNode[] arr = pm.getRootSubNodes(); for(IPreferenceNode pn:arr){ System.out.println("Label:" + pn.getLabelText() + " ID:" + pn.getId()); }
根據打印的信息,選擇你要刪除的Perference Page或者類別,然后刪除它們,例如:
pm.remove("org.eclipse.ant.ui.AntPreferencePage"); pm.remove("org.eclipse.gmf.graphdef.diagram.general"); pm.remove("org.eclipse.pde.ui.MainPreferencePage");
這些代碼可以放在WorkbenchWindowAdvisor postWindowOpen()中執行
回到我們的題目
1,首先,如上節所示,我們可以找到SSH2和Team的ID:
org.eclipse.jsch.ui.SSHPreferences
org.eclipse.team.ui.TeamPreferences
2,找到SSH2頁面對應的類,通過Spy(Shift+Alt+F1)找
其類為:org.eclipse.jsch.internal.ui.preference.PreferencePage, 貢獻它的plugin為org.eclipse.jsch.ui。
3,在plugin.xml的dependencies中添加org.eclipse.jsch.ui的引用。
4,刪除原有的SSH2
pm.remove("org.eclipse.jsch.ui.SSHPreferences");
如果SSH2不是直接在根節點下,可以刪除其所在類別,或者,在其所在類別下刪除它,這里不在累述。
5,把SSH2添加到Team類別下。通過在plugin.xml中添加以下代碼來實現:
<extension point="org.eclipse.ui.preferencePages"> <page category="org.eclipse.team.ui.TeamPreferences" class="org.eclipse.jsch.internal.ui.preference.PreferencePage" id="org.eclipse.jsch.ui.SSHPreferences" name="SSH2"> </page> </extension>
其中,category和class是前文中獲取的,name和id其實可以隨便填,但是我還是使用了默認的值。
大功告成: