2017-04-04 66 views
0

我正在構建RCP4應用程序。將非osgi jar添加到RCP4項目

我有兩個非osgi罐子叫a.jar和b.jar。兩個罐子都有很多非osgi依賴關係。 a.jar的一個依賴是b.jar。因此,層次結構如下所示:

My application 
|--a.jar 
|----aDependency1.jar 
|----aDependency2.jar 
|----aDependencyN.jar 
|----b.jar 
|------bDependency1.jar 
|------bDependency2.jar 
|------bDependencyN.jar 

一些bDependencyN.jars的不同版本的aDependencyN.jars 的(一個例子就是共享記錄-1.0.4.jar VS共享記錄-1.1.2 .jar)

我需要從我的RCP4應用程序直接引用a.jar和b.jar。換句話說,當我寫的代碼,我會從a.jar文件導入包和b.jar)

這是最好的辦法:

  • 通過命令行使用BND 2.4把所有非osgi罐入osgi。然後我通過目標文件將每個jar添加到我的項目中

  • 創建一個新項目「從現有JAR歸檔插件」,選擇a.jar及其所有依賴項並將其導出爲「可部署插件和片段「叫a.with.libs.jar。我對b.jar也做了同樣的事情並創建了b.with.libs.jar。然後通過目標文件將這兩個新罐添加到我的項目中

  • 創建一個新項目「從現有JAR歸檔插件」,並選擇a.jar及其所有依賴關係,以及b.jar和全部它的依賴關係並將其導出爲一個名爲ab.with.libs.jar的「可部署插件和片段」。然後我通過目標文件將新罐添加到我的項目中

  • 有沒有比上述建議更好的方法?

回答

0

一種選擇是使用bnd-platform(我也撰文)從他們管理第三方的依賴,並創建OSGi包。您可以將它與從Maven存儲庫和本地Jars檢索到的依賴關係一起使用(請參閱README)。當你配置Maven依賴項時,它也會包含傳遞依賴項。在引擎蓋下它使用bnd。如果需要,您還可以自定義瓶子的包裝方式。 bnd-platform是Gradle的插件,您可以輕鬆從this template開始 - 只需添加您的依賴關係並提供項目自述文件(軟件包符號名稱,版本)中所述的配置並運行gradlew bundles。然後可以將創建的捆綁包添加到目標平臺。您還可以使用bnd-platform構建p2存儲庫/更新站點。

+0

嗨,感謝您的回覆。我目前的項目不使用Maven,我以前從未使用過Gradle。 bnd-platform網站上的文檔對我來說似乎有點高級,我不知道從哪裏開始設置反映上述示例(所有本地jar)的正確gradle文件。 – ekjcfn3902039

+0

如果它都是本地Jars(而不是Maven依賴),那麼bnd-platform會失去一些好處,因爲它不能自動添加傳遞依賴。作爲出發點,您可以使用上面提到的模板,從文檔中您只需要本地依賴項部分添加Jars:https://github.com/stempler/bnd-platform#local-dependencies – stempler