Eclipse為開發OSGI Bundle提供了良好的支持,它不僅提供向導來創建OSGi Bundle,而且還提供了內嵌的OSGi框架實現(即Equinox容器),可以使用該容器執行和調試Bundle。從本質上說,每一個Eclipse插件都是一個OSGi Bundle,只不過這個OSGi Bundle增加了一些Eclipse專用的代碼而已。下面通過具體的例子來介紹如何用Eclipse來開發OSGi Bundle。
一、新建Bundle
1、在Eclipse的新建向導中選擇“Plug-in Project”並點擊“Next”按鈕,你將看到插件項目對話框。
2、在對話框中輸入輸入以下值:
Project name(項目名稱):EclipseHello
Target Platform(目標平台):an OSGiFramework->Standard (OSGi框架->標准)
3、其它的輸入可以采用缺省值,點擊“Next”按鈕,你將看到插件上下文對話框。
4、在對話框中保持缺省值,點擊“Next”按鈕,你將看到模板對話框。
5、在模板對話框中選擇“Hello OSGi Bundle”模板,點擊“Finish”按鈕完成該項目。
6、在該插件項目中,生成兩個關鍵的文件:
1)Activator.java:激活器類,如果需要在Bundle啟動或關閉時通知自身,可以新建一個實現BundleActivator接口的類,該類需要遵循以下規則:該類必須有一個public的、不帶參數的構造函數,這樣,OSGi框架就能調用該類的Class.newInstance()方法創建這個BundleActivator對象。
啟動一個Bundle,容器將調用Activator類的start()方法,我們可以在start()方法中執行一些資源初始化的操作,start()方法的唯一參數是一個BundleContext對象,Bundles可以通過該對象和 OSGi框架通訊。
關閉一個Bundle,容器將調用Activator類中的stop()方法,我們可以在stop()方法中執行一些資源清理任務。
文件源碼如下:
- public class Activator implements BundleActivator {
- public void start(BundleContext context) throws Exception {
- System.out.println("Hello World!!");
- }
- public void stop(BundleContext context) throws Exception {
- System.out.println("Goodbye World!!");
- }
- }
2)MANIFEST.MF:Bundle的部署描述文件,其格式和正常JAR文件包中的MANIFEST.MF文件相同,因此它由一系列的屬性及這些屬性對應的值組成。OSGi規范規定,您可以使用屬性頭向容器描述您的Bundle。
文件內容如下:
- Manifest-Version: 1.0
- Bundle-ManifestVersion: 2
- Bundle-Name: EclipseHello Plug-in
- Bundle-SymbolicName: EclipseHello
- Bundle-Version: 1.0.0
- Bundle-Activator: eclipsehello.Activator
- Bundle-ClassPath: bin/
- Bundle-Vendor: cjm
- Import-Package: org.osgi.framework;version="1.3.0"
Bundle-ManifestVersion:該屬性告訴OSGi容器,本Bundle將遵循OSGi規范,數值2表示本Bundle和OSGi規范第4版本兼容;如果該屬性的數值為1,則表示本Bundle和OSGi版本3或更早版本兼容。
Bundle-Name:該屬性為本Bundle定義了一個簡短的、可以閱讀的名稱。
Bundle-SymbolicName:該屬性為本Bundle定義了一個唯一的、非本地化的名字,當您需要從別的Bundles中訪問某一指定的Bundle時,您就要使用這個名字。
Bundle-Version:該屬性給出了本Bundle的版本號。
Bundle-Activator:該屬性給出了本Bundle中使用的激活器類名字,這個屬性值是可選的。激活器將對Activator中的start()和stop()方法進行監聽。
Bundle-ClassPath:該屬性定義了該Bundle的運行時類路徑。
Bundle-Vendor:該屬性是對本Bundle發行商的描述。
Import-Package:該屬性定義了本Bundle中引入的Java包。
二、運行Bundle
Eclipse IDE中有一個內嵌的Equinox OSGi容器,您可以利用它來執行或調試OSGi Bundle。以下是運行Bundle的步驟:
1、打開運行時配置對話框,添加一個“OSGi Framework”類型的配置。
2、點擊“Deselect All”按鈕,確保Bundles列表沒有任何的Bundle被選中。
3、在Workspace插件目錄下有一個名為EclipseHello的插件,選中它;在Target Platform插件目錄下,請確保org.eclipse.osgi插件被選中。
4、點擊“Run”按鈕,在控制台視圖中應該會打印出“Hello World!!”。其實,Eclipse是在控制台視圖中打開OSGi控制台的。
5、在控制台中輸入ss命令,查看OSGi容器中包含的Bundle及其狀態等信息。控制台顯示以下信息:
osgi> Hello World!!
osgi> ss
Framework is launched.
id State Bundle
0 ACTIVE org.eclipse.osgi_3.3.0.v20070530
1 ACTIVE EclipseHello_1.0.0
osgi>
三、將插件導出為jar文件(一個jar文件就是一個Bundle)
1、選擇“File > Export” 菜單,打開導出對話框。
2、在導出對話框中,選擇“Plug-in Development > Deployable plug-ins and fragments”項,並點擊“Next”按鈕。
3、在可用插件列表中選中“EclipseHello”插件,選擇jar文件的保存路徑,點擊“Finish”按鈕完成導出。