我正在編寫一個在OSGI環境中運行的應用程序。 現在我想提取一些代碼,並將其放在單獨的捆綁包/ jar文件中,以便在其他應用程序(OSGI或非OSGI)中重複使用它。什麼是構建可在OSGI和非OSGI環境中工作的庫的好方法?
我的目標是消除對OSGI環境類的任何依賴,因爲它也應該運行在其他沒有各種OSGI框架(例如Equinox)的jar的應用程序中。但同時我想在OSGI環境中註冊OSGI服務,前提是該應用程序是OSGI應用程序。
我已經分開的代碼和OSGI相關的代碼僅剩的一塊目前我的活化劑類註冊一些類如OSGi服務:
context.registerService(MyServiceInterface.class.getName(), new MyServiceImpl(), new Hashtable());
要刪除的依賴,我想想以下:
- 我從我的bundle1卸下促動和OSGI依賴
- 我創建另一個bundle2中,我移動激活
最後,我有我的bundle1.jar,它只有一個Manifest.mf文件以使它成爲OSGI就緒,但根據OSGI框架類,不再有任何代碼。 我有另一個bundle,它只屬於我當前的應用程序,它導入了bundle1.jar,並且具有使用激活器在OSGI容器上註冊MyService.class的唯一目的。
- 該方法是否正確或是否還有其他最佳實踐?
- 在OSGI環境良好實踐中註冊服務還是這是東道主應用程序應負責的東西?
該方法的問題在於Activator具有org.osgi.framework的import語句.BundleActivator和org.osgi.framework.BundleContext會導致在非OSGI環境下發生編譯錯誤。這就是我試圖避免 – Christoph
你是說你甚至不想在你的構建路徑上有OSGi庫?爲什麼不,費用是多少?我明白從您的運行時依賴關係中刪除OSGi ... –
好吧,我還沒有想過這件事。那麼這是否是有效的做法?我會很好,因爲我們的構建路徑確實有這些依賴關係(目前使用pde構建)。我打算在github上提供一個maven pom.xml的庫,這就是爲什麼我想讓它對於非osgi應用程序儘可能輕量級的原因。但這是我的第一個開源版本,我首次想到了這種事情。 – Christoph