第1部分: 采用Ganymede進行富客戶機平台開發
Eclipse 的 Ganymede 發行版包括 24 個獨立項目,涵蓋各種各樣的技術。這些項目 大部分都十分成熟,而此發行版將提供對這些項目的增量改進。但是 Ganymede 還包括把 新技術引入到 Eclipse 平台中的許多新項目。在這個 “使用 Eclipse Ganymede 進行桌 面、Web 和移動設備開發” 三部分系列教程中,我們將介紹以下新 Ganymede 特性:RCP 、RAP 和 eRCP,這些特性將允許用一個通用代碼庫分別為桌面、Web 和移動平台開發軟 件;使用 Subversion 進行版本控制;以及使用 p2 進行更新和安裝。
開始之前
本教程既適用於想要了解 Ganymede 中提供的一些令人興奮的新功能的所有 Eclipse 開發人員,也適用於有興趣使用這些功能開發可以部署到擁有通用代碼庫的多個平台中的 應用程序的任何人。您應當了解如何使用 Java 編程語言編程,並且應當熟悉 Eclipse 平台及其使用插件的模型。
關於本系列
第 1 部分(“采用 Ganymede 進行富客戶機平台開發”)將提供 RCP 的新特性、新 Subversion Eclipse 集成及 p2 打包和分發系統簡介。第 2 部分(“應用到 Web 中” )將引入 Rich Ajax Platform(RAP)編寫 Web 應用程序。而第 3 部分(“應用到移動 設備中”)將討論如何使用嵌入式 Rich Client Platform(eRCP)開發移動設備的應用 程序。
關於本教程
RCP 是允許開發人員挑選和選擇所需 Eclipse 插件 — 並且 只包括所需插件 — 構建客戶機桌面應用程序的 Eclipse 架構。為了演示 Ganymede 的一些新特性,您將開發一個簡單的 RCP 應用程序 —— 一個備忘 記事本(personal organizer)。在此過程中,您將看到 Ganymede 中對 RCP 的一些更 改,並且您將使用此應用程序研究新 Subversion 源代碼控制和 p2 打包和分發系統。
主題包括:
如何下載和安裝 Ganymede 軟件包。
如何設置 Subversion 客戶機並將您的源代碼存儲在 Subversion 中。
如何設置目標平台並 從一個操作系統切換到另一個操作系統(即,從 Mac OS X 到 Microsoft® Windows® Vista)。
如何創建應用程序模型和用戶插件。
如何使用 p2 創建產品定義以及打包和分 發應用程序。
系統要求
您需要以下技術才能繼續本教程:
Eclipse Ganymede 位於 Eclipse Foundation。
從 Sun Microsystems 可以獲得 Java 2 Standard Edition V5 或更高版本。
開始使用 Ganymede
在開始開發備忘 記事本應用程序之前,需要下載並安裝 Eclipse 的 Ganymede 軟件包。在本節中,您將 了解從哪裡獲得下載及如何設置它以開始使用。
下載 Ganymede
Ganymede 軟件包代表 Eclipse 的下一個增量版本,並且同樣地,意味 Eclipse 平台的全新安裝。 連同所有 Eclipse 發行版一起,有許多可以選擇的軟件包,這取決於開發需求。Eclipse Web 站點將提供 比較圖表,如圖 1 所示:
圖 1. Eclipse 軟件包的比較
鑒於本系列的目的,您可以下載 RCP/插件版本,因為該版本包含開發和部署 RCP 應 用程序的一切(參見圖 2)。選擇適用於您的操作系統的版本,選擇適當的鏡像,然後下 載(該文件非常大 — 將近 200 MB,這取決於您的平台 — 因此請耐心一些)。
圖 2. Eclipse Ganymede 的 RCP/插件軟件包的下載頁面
安裝和運行
下載完成時,將軟件包解壓縮到 Eclipse 的所需安裝位置,然後雙擊 Eclipse 按鈕 運行。選擇一個工作空間,然後 Eclipse 將顯示歡迎頁面。在其中選擇 Workbench 圖標 (位於歡迎屏幕最右側的箭頭,如圖 3 所示)。
圖 3. Eclipse 安裝的歡迎屏幕
到目前為止,這些內容與先前版本的 Eclipse 沒有多大區別,可是在下一小節中,您 將看到對 Eclipse 開發的核心組件之一 Rich Client Platform 的一些增量改進。
現在已經安裝了 Ganymede 發行版。但是,您可能會驚訝地意識到自己尚未安裝屬於 Ganymede 的每一個軟件包。接下來,在研究 Subversion 時,您必須單獨下載並安裝相 關軟件包。雖然 Subversion 被視為 Ganymede 發行版的一部分,但是許可限制將阻止它 隨軟件包的其余部分自動分發,這要求您從 Eclipse 中執行單獨下載。
使用 Subversive 插件的 Subversion 控件
源代碼控制是所有重要軟件開發工作的主要部分,尤其是支持跨多個地域的分布式團 隊開發(例如,本教程的合著者都位於大陸的另一端)。這樣的系統允許不一致地更改代 碼庫,而不必擔心一名程序員所做的更改會對其他程序員有不利影響 — 但是沒有一個管 理中心控制整個流程或關閉需求以及程序員之間的仔細協調。
Subversion 是一個開源的版本控制系統,類似於 CVS,但是被普遍認為是它的最終接 替者。Eclipse 的 Subversion 支持多年來一直可以使用第三方插件,其中最流行的被稱 為 Subversive。Ganymede 項目承擔了 Subversive 的開發並將其添加為 Eclipse 的核 心庫。但是,未解決的法律問題阻止它隨 Ganymede 的其余部分一起分發,因此至少到現 在為止,您仍然必須從 Ganymede 中單獨安裝 Subversive 插件。
繼續閱讀以查看如何安裝 Subversive 並使用它管理備忘記事本應用程序的源代碼。
安裝 Subversive
Subversive 由兩個部分組成,每個部分都必須單獨安裝。第一個部分是 Subversive 插件本身,該插件將提供用於將 Subversion 支持集成到 Eclipse 中的 UI 元素。第二 個部分是連接器庫,並且這些庫都是單獨開發和授權的。要從 Eclipse 中安裝 Subversive 插件,請浏覽到 Help > Software Updates。
圖 4. Help 菜單中的 Software Updates
選擇 Available Software 屏幕,然後單擊 Add Site。對於 Location,輸入 http://download.eclipse.org/technology/subversive/0.7/update-site/ 並單擊 OK。
圖 5. Subversive 的 Add Site
這將添加一列相關插件,但是在安裝這些插件之前,請再次單擊 Add Site,然後添加 Subversive 連接器的位置。在位置字段中輸入 http://www.polarion.org/projects/subversive/download/eclipse/2.0/update-site/ 並單擊 OK。
圖 6. Subversive 連接器的 Add Site
您將看到兩個更新站點已經添加了許多不同的插件。您可以選擇全部這些插件,但是 目前至少要選擇帶有 SVN Team Provider 和 Subversive SVN Connectors 標簽的插件。 從列表中選擇並單擊 Install。
圖 7. Subversive 插件
Eclipse 將引導您完成一組標准的安裝插件屏幕,包括要求您查閱並接受許可條款的 屏幕。執行完這些屏幕,然後在系統提示時,重新啟動 Eclipse 工作區。Subversive 插 件現已安裝。
設置庫
Subversion 像 CVS 一樣是基於服務器的源代碼庫,這使得它成為跨分布式團隊協作 進行軟件開發的優秀選擇。服務器部分不屬於 Eclipse,並且安裝和設置 Subversion 服 務器超出本教程的范圍。但是,有很多種方法可以運行一個 Subversion 服務器,包括使 用 Apache。
在擁有可以使用的 Subversion 服務器後,您可以設置項目以使用 Subversive 插件 存儲源代碼和配置。在 Package Explorer 中高亮顯示項目名稱並顯示其上下文菜單。在 其中選擇 Team > Share Projects。Eclipse 將顯示提供版本控制系統選項的屏幕: CVS(有時已經可以作為 Eclipse 的核心特性獲得)和 SVN(這是 Subversion 的縮寫符 號,在添加 Subclipse 時啟用)。
圖 8. 通過 SVN 共享項目
選擇 SVN 並選擇 Next。系統將顯示一個屏幕(如圖 9 所示),請在其中輸入服務器 URL 和 Subversion 服務器的憑證。輸入服務器的信息。然後,可以接受後幾個屏幕中設 置的命名庫的默認值,並單擊 Finish。
圖 9. Share Project 向導
Eclipse 將顯示項目的提交屏幕(參見圖 10)。屬於我們的項目的所有文件都將被默 認選中,但是如果需要,您也可以選擇不要簽入某些文件。系統還將提示輸入初始簽入注 釋。在每次簽入時輸入注釋是一種優秀的實踐。輸入注釋並單擊 OK。對於備忘記事本應 用程序代碼,需要選中所有文件。
圖 10. Subversion 簽入框
Eclipse 現在已經把備忘記事本的所有文件添加到 Subversion 庫中。如果要使用 Subversion 的 WebDAV 版本(例如像我們一樣通過 Apache),則可以使用 Web 浏覽器 研究庫的結構。只需輸入在 Subversive 中用於設置庫的相同 URL 和憑證,然後通過每 個文件或目錄的超級鏈接的方式浏覽目錄樹。
圖 11. 通過 Web 查看 Subversion 庫
您可以在 Package Explorer 中看到我們的項目現在已經與 Subversion 綁定在一起 。Subversion 控件下的每個文件旁邊都有一個修訂編號,並且項目本身的名稱旁邊都有 庫名稱。
圖 12. 通過 Subversion 共享後的 Package Explorer
使用庫中的代碼
像 CVS 一樣,我們現在可以從 Team 上下文菜單中訪問 Subversion 源代碼控制功能 。要在 Package Explorer 中選擇需要在庫中更新的文件,請打開其上下文菜單並選擇 Team。現在將在此上下文菜單中顯示所有 Subversion 特性。
下面是我們將使用的更加常用命令列表(參見圖 13):
Commit保存庫更改Update用庫中的最新內容刷新本地副本Revert放棄更改並用庫中的 最新內容替換更改Add to Version Control在庫中標記新創建的本地文件(然後必須單擊 Commit 提交文件才能將它添加到服務器中)。
圖 13. Subversion 上下文菜單
要從庫中刪除文件,請像在正常情況下一樣從 Package Explorer 中將其刪除(該文 件的上下文菜單中的 Delete 項)。然後提交(commit)該文件的父目錄。在對服務器執 行任何一次 commit 之前,您可以檢查所有更改;對於刪除操作,您將看到被刪除文件的 名稱和位置。
Subversion 也像 CVS 一樣使用樂觀鎖定 — 即,並沒有簽出文件、進行編輯並鎖定 它,而是可以隨意在本地編輯代碼,完成後再簽入。簽入時,所有沖突隨之解決。
在 Ganymede 中創建 RCP 應用程序
在本節中,您將通過使用 Eclipse 向導創建 RCP 框架,添加邏輯代碼並運行來創建 備忘錄應用程序 — 一個簡單的只有一個視圖的 RCP 應用程序。
創建 RCP 應用程序框架
首先,通過選擇 File > New > Project 創建一個新項目。Eclipse 將顯示 New Project 向導,如下所示:
圖 14. New Project 向導
選擇 Plug-in Project 並選擇 Next。下一個屏幕將允許您輸入項目的詳細信息。由 於要創建備忘記事本應用程序,因此將項目命名為 com.devworks.tutorial.po(用於 “ 備忘記事本”)。使用項目的默認位置(Eclipse 將在按項目命名的工作區下創建一個文 件夾)。一定要選中 Project Settings 下的 Create a Java Project 復選框,並保留 默認值 src 和 bin 作為文件夾名稱。對於目標平台,選擇 Eclipse version 單選按鈕 並從下拉菜單中選擇 3.4。請將 Add project to working sets 的復選框留空並選擇 Next。
圖 15 中所示的 New Plug-in Project 向導將繼續 Plug-in Content 屏幕,您可以 在其中輸入關於插件的信息,這些信息將被添加到描述插件並允許設置插件選項的清單文 件中。
圖 15. New Plug-in Project 向導屏幕
對於插件 ID,選擇先前使用的項目名稱(com.devworks.tutorial.po)。由於這是第 一版插件,因此將插件版本值保留為默認值 1.0.0。同樣地,您可以保留默認值 Po Plug-in 用於插件名稱,以及 DEVWORKS 用於插件提供商。
Execution Environment 下拉菜單允許選擇 Eclipse 已知的環境,從而設定插件的特 定運行時環境。對於本教程,選擇 JavaSE-1.6。
下一部分將設置插件選項。一定要選中 Generate an activator, a Java class that controls the plug-in's life cycle 框並將默認 Activator 類名 com.devworks.tutorial.po.Activator 更改為 com.devworks.tutorial.po.Activator。
由於此插件將有可視組件,因此一定要選擇 This plug-in will make contributions to the UI 復選框。請將 Enable API Analysis 的復選框留空。這超出本教程的范圍。 最後,由於這將是 RCP 應用程序,因此在系統提示 Would you like to create a rich client application? 的問題時選擇 Yes 單選按鈕,然後選擇 Next 以繼續向導。
圖 16. New Plug-in Project 向導中的 Plug-in Content 屏幕
圖 17 將詢問需要使用哪一類 RCP 模板。由於我們的項目將有可視組件, 請選擇 RCP Application with a View,然後選擇 Next。
圖 17. New Plug-in Project 向導的 Templates 屏幕
在圖 18 中所示的最後一個向導屏幕 Single View RCP application 中,您可以輸入與剛選擇 的模板相關的信息。將應用程序窗口標題命名為 Personal Organizer。將 Java™ 軟件包名稱保留為默認值 com.devworks.tutorial.po 並將應用程序類命名為 TaskOrganizerApplication。最後,選擇 Add branding 標記,這將在應用程序啟動時顯 示閃屏。單擊 Finish。
圖 18. New Project 向導中的 Single-view RCP 屬性屏 幕
Eclipse 將詢問是否需要將工作區視圖切換到 Plug-in Development 透視圖。 此透視圖將包含需要查看的所有視圖,因此選擇 Yes。向導完成時將在工作區的項目目錄 中生成與單視圖 RCP 應用程序相關的模板文件,以及在插件開發中十分有用的標准目錄 結構。然後將在 Plug-in Development 透視圖中呈現工作區屏幕。
圖 19. 完成 New Project 向導後的插件工作區透視圖
Eclipse 所創建的模板文件列在 Package Explorer 的 src 下。簡要地說 ,下面是它們的函數:
Activator插件的啟動點TaskOrganizerApplication實現 Application 和定義 應用程序的生命周期的 Application ActivatorApplicationActionBarAdvisor該類負責 管理添加到窗口中的操作的生命周期ApplicationWorkbenchAdvisor該類用於初始化透視 圖ApplicationWorkbenchWindowAdvisor該類負責窗口的許多可視方面(大小、狀態行、 菜單欄等)Perspective在應用程序中可見的視圖和編輯器View帶有三個元素的簡單 Table 浏覽器
此外,icons 文件夾包含與應用程序相關的圖標的位圖資源;並且 splash.bpm 是應用程序的閃屏使用的圖形。
這些模板文件是創建 RCP 插件的優秀起點,並且您將基於這些模板創建備忘記 事本。但是實際上,它們形成了自己的完整應用程序(雖然不是可以完成很多操作的應用 程序),您可以立即運行。
要查看這些模板同時工作,請轉到 Package Explorer 窗口並高亮顯示位於樹 視圖最頂部的項目名稱,然後打開上下文菜單(右鍵單擊 Windows;按 control 並單擊 Mac OS X 等)。選擇 Run As > Eclipse Application。您應當會看到短暫的閃屏, 然後看到帶有三個元素的樹視圖。
圖 20. 來自模板的備忘記事本默認樹視圖
此時,您已經擁有構建帶有單個列表視圖的簡單備忘記事本所需的一切。
編寫備忘記事本應用程序的代碼
從這裡開始,您已經准備好編寫備忘記事本應用程序的代碼。該備忘記事本將 給一個屏幕提供一張任務列表。每項任務將包含描述、優先級、所有者和記錄完成百分比 的位置。將有添加或刪除這些任務的按鈕,以及關閉整個應用程序的按鈕。為了確保有馬 上可以使用的內容,該應用程序將用帶有各種設置的十個樣例任務預先填充任務管理器。 為了保持簡單,您輸入的數據將不會存儲在會話之間的任何位置。
這段代碼的詳細信息與嘗試在本教程中演示的內容不是特別相關,因此鼓勵您 下載 這段代碼。事實上,許多模板版本的文件不需要更改,但是需要對視圖做一些更改 。
在名為 View 的項目下創建新軟件包。在此處下,您將創建與應用程序的可視 元素相關的文件。首先,將當前模板創建的 View 類移到該新軟件包下,並且將其重命名 為 PersonalTaskView。
由於已經更改 View 類名,因此必須更改其主 View 類的插件定義。因此,在 編輯器中打開 META-INF/MANIFEST.MF 文件並切換到 Extensions 選項卡,如圖 21 所示 。展開列表視圖中的 org.eclipse.ui.views 擴展並高亮顯示 View 類。Eclipse 將在屏 幕右側顯示該類的屬性。將該類更改為新軟件包並命名為: com.devworks.tutorial.po.view.PersonalTaskView。將該類的名稱更改為 PersonalTaskView。一定要保存更改。
圖 21. 更改 View 類
由於備忘記事本實際上是任務集合,因此模型對象被稱為 PersonalTaskModel (參見清單 1)。
清單 1. 表示單項任務的 PersonalTaskModel 類
package com.devworks.tutorial.po.view;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.Vector;
public class PersonalTaskModel {
private final int COUNT = 10;
private List<PersonalTask> tasks = new ArrayList<PersonalTask>(COUNT);
private Set changeListeners = new HashSet();
static final String[] OWNERS_ARRAY = { "-", "Bill", "Larry", "Jo", "Harry",
"Hulk" };
static final String[] PRIO_ARRAY = { "-", "Low", "Medium", "High" };
public PersonalTaskModel() {
super();
this.initData();
}
private void initData() {
PersonalTask personalTask;
for (int i = 0; i < COUNT; i++) {
personalTask = new PersonalTask("Sample Task " + (i+1));
personalTask.setTaskOwner(OWNERS_ARRAY[i % 5]);
personalTask.setTaskPrio(PRIO_ARRAY[i % 3]);
tasks.add(personalTask);
}
};
public String[] getOwners() {
return OWNERS_ARRAY;
}
public String[] getPrios() {
return PRIO_ARRAY;
}
public List<PersonalTask> getTasks() {
return tasks;
}
public void addTask() {
PersonalTask task = new PersonalTask("New Sample Task");
tasks.add(tasks.size(), task);
Iterator iterator = changeListeners.iterator();
while (iterator.hasNext())
((IPersonalTaskViewer) iterator.next()).addTask(task);
}
public void removeTask(PersonalTask task) {
tasks.remove(task);
Iterator iterator = changeListeners.iterator();
while (iterator.hasNext())
((IPersonalTaskViewer) iterator.next()).removeTask(task);
}
public void taskChanged(PersonalTask task) {
Iterator iterator = changeListeners.iterator();
while (iterator.hasNext())
((IPersonalTaskViewer) iterator.next()).updateTask(task);
}
public void removeChangeListener(IPersonalTaskViewer viewer) {
changeListeners.remove(viewer);
}
public void addChangeListener(IPersonalTaskViewer viewer) {
changeListeners.add(viewer);
}
您可以看到清單 1 定義了任務結構以及運行方法。在本例中,它也定義了用於 初始填充的樣例數據。
PersonalTaskViewer 類將定義 TableViewer,後者是用於保存任務列表的構建 塊。創建 PersonalTaskViewer 涉及創建 TableViewer,添加 Content and Label Provider,最後初始化 PersonalTaskModel 並將此模型設為 TableViewer 的輸入。
清單 2. PersonalTaskViewer 中的 addChildControls() 方法片段
tableViewer = new TableViewer(table);
tableViewer.setUseHashlookup(true);
tableViewer.setColumnProperties(columnNames);
// Create the cell editors
CellEditor[] editors = new CellEditor[columnNames.length];
// Column 1 : Completed (Checkbox)
editors[0] = new CheckboxCellEditor(table);
// Column 2 : Description (Free text)
TextCellEditor textEditor = new TextCellEditor(table);
((Text) textEditor.getControl()).setTextLimit(60);
editors[1] = textEditor;
// Column 3 : Priority (Combo Box)
editors[2] = new ComboBoxCellEditor(table, taskList.getPrios(), SWT.READ_ONLY);
// Column 4 : Owner (Combo Box)
editors[3] = new ComboBoxCellEditor(table, taskList.getOwners(), SWT.READ_ONLY);
// Column 5 : Percent complete (Text with digits only)
textEditor = new TextCellEditor(table);
((Text) textEditor.getControl()).addVerifyListener(
new VerifyListener() {
public void verifyText(VerifyEvent e) {
e.doit = "0123456789".indexOf(e.text) >= 0 ;
}
});
editors[4] = textEditor;
// Assign the cell editors to the viewer
tableViewer.setCellEditors(editors);
// Set the cell modifier for the viewer
tableViewer.setCellModifier(new TaskCellModifier(this));
// Set the default sorter for the viewer
tableViewer.setSorter(new PersonalTaskSorter (PersonalTaskSorter.TASK_DESC));
// Create and setup the TableViewer
tableViewer.setContentProvider(new PersonalTaskContentProvider());
tableViewer.setLabelProvider(new TaskLabelProvider());
// The input for the table viewer is the instance of PersonalTaskModel
taskList = new PersonalTaskModel();
tableViewer.setInput(taskList);
當 PersonalTaskContentProvider 類的輸入被設為特定元素時,該類包含一些 方法,可以返回顯示在 TableViewer 中的元素。該類還定義對 PersonalTask 的基本操 作,如來自 IPersonalTaskViewer 的 addTask()、removeTask() 和 updateTask()。
PersonalTaskLabelProvider 類將為該表的列數據提供標簽和圖像。
清單 3. PersonalTaskLabelProvider 中的 getColumnText()
public String getColumnText(Object element, int columnIndex) {
String result = "";
PersonalTask task = (PersonalTask) element;
switch (columnIndex) {
case 0:
break;
case 1 :
result = task.getTaskDesc();
break;
case 2 :
result = task.getTaskPrio();
break;
case 3 :
result = task.getTaskOwner();
break;
case 4 :
result = task.getPercentComplete() + "";
break;
default :
break;
}
return result;
}
TaskCellModifier 將用作以抽象方式從單元格編輯器訪問數據模型的單元格修 飾符。它提供的方法將檢查是否可以編輯 TaskModel 元素的屬性,檢索 TaskModel 元素 的屬性值以及將單元格編輯器的值存儲回模型元素的屬性中。
PersonalTaskSorter 類將獲取 PersonalTaskContentProvider 所提供的元素 並將它們按給定順序排序。compare() 方法將根據 SortType 對元素排序。
清單 4. PersonalTaskSorter 中的 compare()
public int compare(Viewer viewer, Object o1, Object o2) {
PersonalTask task1 = (PersonalTask) o1;
PersonalTask task2 = (PersonalTask) o2;
switch (sortType) {
case TASK_DESC :
return compareDescriptions(task1, task2);
case TASK_PRIO :
return comparePrios(task1, task2);
case TASK_OWNER :
return compareOwners(task1, task2);
case TASK_COMPLETE :
return comparePercentComplete(task1, task2);
default:
return 0;
}
}
PersonalTaskView 是擴展 ViewPart 的 View 類。
清單 5. PersonalTaskView 中的 createPartControl()
public void createPartControl(Composite parent) {
viewer = new PersonalTaskViewer(parent);
viewer.getCloseButton().addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
handleDispose();
}
});
}
PersonalTaskOrganizer 應用程序的透視圖將把此 View 顯示在透視圖中(參 見清單 6)。在此過程中,您已經建立了 RCP 應用程序向導所生成的代碼模板與 PersonalTaskView 之間的連接。
清單 6. 透視圖中的 createInitialLayout()
public void createInitialLayout(IPageLayout layout) {
String editorArea = layout.getEditorArea();
layout.setEditorAreaVisible(false);
layout.setFixed(true);
layout.addStandaloneView(PersonalTaskView.ID, false, IPageLayout.LEFT, 1.0f,
editorArea);
按照以前的做法運行應用程序,請在 Package Explorer 中的項目的上下文菜 單中選擇 Run > Eclipse Application。在閃屏後,您將看到預先填充一些樣例任務 的任務管理器。
圖 22. 備忘記事本任務管理器視圖
祝賀您!您已經創建了現在可以在所選桌面環境中運行的簡單 RCP 插件。
創建產品定義
在先前版本的 RCP in Eclipse 中,分發的應用程序中附帶的插件限於目標目 錄中可用的那些插件。使用 Ganymede,您現在可以確切指定所需的插件,從而得到更精 確的分發版。在本節中,您將打包應用程序,以便可以使用更緊湊的軟件包分發,其中僅 包含運行所需的內容。
設置目標環境
要設置目標環境,請在 Package Explorer 中高亮顯示項目名稱並在上下文菜 單中選擇 New > Product Configuration。
圖 23. 上下文菜單中的 Product Configuration
這將啟動允許編輯 RCP 應用程序配置的向導(參見圖 24)。在向導的第一個 屏幕中,請將父文件夾設為 com.devworks.tutorial.po 並將文件命名為 TaskOrganizer.product。請將 Initialize the file content 的單選按鈕選擇為 Create a configuration file with basic settings,然後選擇 Finish。
圖 24. New Product Configuration 向導
Eclipse 已經創建了名為 TaskOrganizer.product 的文件,該文件包含默認顯 示在編輯器中的 Overview 選項卡的配置模板定義。
請將顯示在應用程序標題欄中的名稱指定為 Personal Organizer,並將產品標 識符指定為 com.devworks.tutorial.po.product。產品版本編號為 1.0.0,而應用程序 為 com.devworks.tutorial.po.application。這後兩個值是從下拉列表中選擇的。最後 ,應用程序的產品配置將基於插件,因此將該配置選擇為單選按鈕。由於編輯的是屬性文 件,因此請一定要通過文件菜單或者使用操作系統相應的快捷鍵保存工作。
現在選擇 Configuration 選項卡,您可以在該選項卡中添加所需插件且僅限於 所需插件(參見圖 25)。首先通過單擊 Add 添加剛編寫的插件。顯示所有已知插件的對 話框將出現;選擇 com.devworks.tutorial.po 並單擊 OK。
圖 25. 選擇用於配置的插件
您的插件現在將顯示在 TaskOranizer.product 編輯器的 Configuration 選項 卡的列表中(參見圖 26)。
圖 26. Taskorganizer.product 編輯器視圖
在告訴 Eclipse 這是分發版所需的一個插件後,它現在可以直接判斷並自動添 加所有從屬插件。單擊 Add required plug-ins,然後 Eclipse 將把所需的附加插件添 加到列表中。
圖 27. 附加插件