2010-06-23 34 views
0

使用罐子我使用java命令運行的OSGi: Java的罐子org.eclipse.osgi_3.5.1.R35x_v20090827.jar -console 然後該軟件包可以在./plugins目錄中找到。如何找到一個類,如果我不希望在OSGi的

有2個問題。 (1)我在本地機器上編輯了一個類文件,並將它傳送到遠程服務器。所以我想osgi只加載不是jar的類。我該怎麼做?如果osgi框架不支持這個功能。我必須打包只編輯了一個類文件的jar文件,並將其傳輸到遠程服務器。包裝它並轉移整個罐子的速度會很慢。 (2)當我在後臺運行命令。我怎麼能再次獲得osgi控制檯?

回答

0

可能有非標準的方法來加載類,但是沒有辦法用純OSGi來做到這一點。在OSGi中,捆綁包(jar文件)是可以由OSGi框架加載和管理的交付包。通常,每個bundle都由一個單獨的類加載器加載。 您可以獲得很多:您可以指定哪些軟件包具有哪個版本的軟件包導出或導出。在Manifest中,您以有序的方式表示這些關係。通過這種方式,OSGi框架能夠在不中斷其他捆綁的情況下管理依賴關係。

0

如果您試圖替換類以進行調試,您可以嘗試在支持熱代碼替換的虛擬機上進行遠程調試。這將允許您逐步查找問題並修復它,而無需重新啓動OSGi。

一旦你找到修復,但你將需要重建捆綁。 @akr是正確的,OSGi的打包機制是捆綁的。

要回答你的第二個問題,如果你想要控制檯,不要在後臺運行它。只需在自己的shell中運行該命令即可。在開發時,這應該不成問題。在部署時,您不應該使用控制檯來執行任何操作。來自Eclipse的P2等技術可以幫助管理部署的OSGi運行時。

0

回答問題2:OSGi有支持telnet和SSH的shell。使用其中之一可以讓你在後臺運行這個進程,但仍然可以連接到它(甚至很明顯)。

0

如果您使用bundleContext.installBundle(字符串位置)來安裝捆綁軟件,您可以在服務器上定義一個jar文件解壓縮的文件夾。之後,您可以只將該類複製到服務器文件夾,並在該包上調用更新命令。

如果在m2e和maven-bundle-plugin中使用Eclipse,只需在保存類後將目標/ classes目錄簡單地同步到服務器上的文件夾即可(因爲在這種情況下MANIFEST.MF將盡快刷新當你保存你的.java文件)

正如你所看到的,你必須複製生成的MANIFEST.MF,以確保Import-Package部分也被刷新。

如果您可以通過ssh或telnet連接到您的服務器(例如使用felix-osgi-console或equinox-console),您可以編寫一個簡短的shell腳本(或cmd在windows中)來執行此操作。

相關問題