2015-04-07 59 views
6

我有一個需要轉換爲OSGi包的JAR文件。 我沒有JAR文件的原始源代碼。將現有的JAR轉換爲OSGi包

我試圖從使用的答案:How to create OSGi bundle from jar library?

然而,他們是非常不合時宜的。

編輯:我需要轉換幾個,但固定數量的罐子。

+0

是否有一種方法不涉及Eclipse? – CodeTower

+0

http://wiki.osgi.org/wiki/Migration –

+1

這[blog](http://skysailserver.blogspot.de/2013/10/converting-ordinary-jar-into-osgi.html)是關於創建捆綁_without_涉及Eclipse。 – evandor

回答

6

選項1 - 使用BND平臺期待罐的頻繁添加/更新時,或建立自己的OSGi包時,你可以從Maven倉庫

我們使用bnd-platform檢索您的依賴關係(我也是作者)管理第三方依賴關係並從中創建OSGi包。您可以將它與從Maven存儲庫和本地Jars檢索到的依賴關係一起使用(請參閱README)。如果您經常添加或更新您的依賴項,我建議您嘗試bnd-platform。它是搖籃一個插件,可以方便的與this template開始 - 只需添加您的Jar文件,並在項目README(捆綁符號名稱,版本)和運行gradlew bundles描述提供配置。

選項2 - 使用BND當你做一次或添加/更新很少

如果你只做這個過程中一次或很少,一個簡單的方法來創建一個OSGi構建OSGi包從現有的Jar捆綁到直接使用bnd on the command line。你唯一需要的是Java和bnd jar。您可以使用wrap嘗試自動打包jar或使用instructions for bnd創建.bnd文件(例如僅導出特定的包)。

例.BND文件:

-classpath: lib/trove-2.0.4.jar 
-output: gnu.trove-2.0.4.jar 
Export-Package: *;-split-package:=merge-last;-noimport:=true 
Import-Package: * 
Bundle-Version: 2.0.4 
Bundle-Name: GNU Trove Collections Plug-in 
Bundle-SymbolicName: gnu.trove 

調用示例:

java -jar <path to bnd>.jar trove-2.0.4.bnd 

的BND罐下載不再通過網站直接提供的,一個好的辦法是download it from Maven Central

+0

我使用了選項2.它運行良好。謝謝。 – CodeTower

2

Eclipse Bundle Recipe項目提供了一種基於Maven的方法,用於將OSGi元數據添加到從Maven存儲庫中消耗的JAR中。儘管它的名字不使用Eclipse。

在其核心,它使用bnd tool。這個工具就像一把瑞士軍刀。它分析jar和類文件並正確計算軟件包的導入和導出。你應該使用bnd來自己轉換專有的jar。這是available in Maven Central

+0

如果你在捆綁包中共享這種依賴關係,這將不起作用 - 你會得到一個類加載器衝突 – zacheusz

+0

@zacheusz,請用你正面臨的特定問題打開一個_new_問題。看起來您正遇到特定圖書館的問題。一般來說,通過使用** bnd **處理JAR創建的捆綁包工作得非常好。但是,一些圖書館需要額外的步驟才能成爲優秀的OSGi公民。 – Gunnar

0

或只使用OSGi的:用換行選項,如下安裝。

osgi:install wrap:file:/u01/repository/com/oracle/ojdbc6/11.2.0/ojdbc6-11.2.0.jar 

這將部署jar文件包,你可以得到在「$ fuse_home /數據/緩存/包(編號)/version0.0」文件夾中的包。

+0

正如旁註:要做到這一點,你需要安裝pax url wrap。 –