1. 開發(fā)環(huán)境的準(zhǔn)備
現(xiàn)在的eclipse都已經(jīng)包含了Equinox,無需單獨下載。
2. 開發(fā)OSGi的HelloWorld應(yīng)用程序
在這一節(jié),我們將開發(fā)一個OSGi bundle,演示如何利用Equinox進行OSGi bundle的開發(fā)、運行及調(diào)試,為之后的示例做準(zhǔn)備。
首先,新建一個Plug-in工程,如下圖所示:
下一步,注意選擇目標(biāo)平臺,默認(rèn)為Eclipse version *,將其改成Equinox,如下圖所示:

之后按默認(rèn)下一步即可,到最后一步時,無需根據(jù)模板創(chuàng)建工程,去掉默認(rèn)的勾,如下圖:

點擊完成,創(chuàng)建的工程目錄如下圖所示:

從圖中,可以看到,eclipse為工程自動生成了一個Activator類,如下所示:























下面我們將要完成首次的Equinox運行,將向大家展現(xiàn)bundle到底是如何運行起來的。為helloworld選擇運行方式,如下圖所示:

彈出如下對話框:

在彈出的對話框中,新建一個OSGi Framework運行環(huán)境(雙擊OSGi Framework即可,這里為其取名Equinox),選中helloworld(1.0.0),然后點擊右邊的Add Required Bundles按鈕,eclipse將自動選中運行helloworld的依賴bundle,如果有必要,可以點擊右下的Validate Bundles驗證按鈕,驗證程序正常運行所需的bundle是否都被選中,最后點擊運行,回到控制臺:
osgi> Hello World!
可以看到,之前在Activator的start方法中的輸出語句已經(jīng)被輸出到控制臺,我們可以通過命令ss查看Equinox的運行情況,可以看到一共運行了兩個bundle,如下:
ss
Framework is launched.
id State Bundle
0 ACTIVE org.eclipse.osgi_3.4.3.R34x_v20081215-1030
1 ACTIVE helloworld_1.0.0
還記得之前講到過的bundle的幾種狀態(tài)吧?helloworld已經(jīng)運行起來了。
那么Equinox具體支持哪些命令呢?下表列出了主要的一些命令,如需查看更詳細(xì)的命令清單,則可以在控制臺鍵入help。
類別 |
命令 |
含義 |
控制框架 |
|
啟動框架 |
|
停止框架 |
|
|
關(guān)閉、退出框架 |
|
|
立即退出,相當(dāng)于 System.exit |
|
|
卸載所有 bundle(前提是已經(jīng) shutdown) |
|
|
設(shè)置屬性,在運行時進行 |
|
控制 bundle |
|
安裝 |
|
卸載 |
|
|
啟動 |
|
|
停止 |
|
|
刷新 |
|
|
更新 |
|
展示狀態(tài) |
|
展示安裝的 bundle 和注冊的服務(wù) |
|
展示所有 bundle 的簡單狀態(tài) |
|
s |
展示注冊服務(wù)的詳細(xì)信息 |
|
|
展示導(dǎo)入、導(dǎo)出包的狀態(tài) |
|
|
展示所有已經(jīng)安裝的 bundles 的狀態(tài) |
|
|
展示 bundles 的頭信息,即 MANIFEST.MF 中的內(nèi)容 |
|
|
展示 LOG 入口信息 |
|
其它 |
|
在另外一個進程中執(zhí)行一個命令(阻塞狀態(tài)) |
|
和 EXEC 不同的是不會引起阻塞 |
|
|
促使垃圾回收 |
|
|
得到屬性,或者某個屬性 |
|
控制啟動級別 |
|
得到某個 bundle 或者整個框架的 start level 信息 |
|
設(shè)置框架的 start level |
|
|
設(shè)置 bundle 的 start level |
|
|
設(shè)置初始化 bundle 的 start level |
至此,我們已經(jīng)成功的演示了helloworld,初步了解了OSGi的bundle是如何開發(fā)并運行的。