2013-02-14 60 views
0

我有一個大型的Java應用程序,主要是大量的數據庫訪問的網絡和文件處理。沒有用戶界面。我們公開了一些Web服務(嵌入式Netty)並調用一些外部的休息Web服務。該項目是用Ant構建的。它大概有10個不同的罐子加上30-40個庫。初學者啓動大型OSGi遷移 - osgi.wiring.package = android.dalvik?

我目前的任務是將項目移到OSGi框架。我感到很驚訝。

遵循「OSGi In Action」第6章中的示例,我使用了BND ant任務將整個項目放入一個巨大的jar文件中。這工作。我能夠使用java -jar運行程序。這裏是我當前的.bnd文件:

-output: bundle/MerchantServicesBundle.jar 
-include: manifest/merchantservices.manifest 
Bundle-Name: MerchantServices 
Bundle-SymbolicName: com.shopping.services.merchant 
Bundle-Version: 4.1 
Main-Class: com.shopping.merchant.services.netty.MerchantServices 
Class-Path: /home/ppantera/repositories/MerchantJava/modules/MerchantServices/conf/ 

Private-Package: * 

我使用Apache Felix 4.0.3。從Gogo外殼我可以安裝捆綁軟件,但是當我啓動它時,我得到:

org.osgi.framework.BundleException:捆綁包com.shopping.services.merchant [8]中的未解析約束:無法解析8.0:缺少要求[8.0] osgi.wiring.package; (osgi.wiring.package = android.dalvik)

爲什麼Felix認爲這是一個Android項目?

在網上似乎沒有太多關於這個。你會推薦使用Felix的舊版本,這樣我就可以避開可能會導致我混亂的新OSGi功能嗎?

我嘗試添加這對我.BND文件:

要求-能力:osgi.ee;過濾器=「(&(osgi.ee = JavaSE)(版本> = 1.7))」

這沒有幫助。我究竟做錯了什麼?任何其他指針?

回答

2

它看起來像bnd檢測到一個Android包的需求,並將其添加到MANIFEST.MF,它可能在您的代碼中,但也可能在您的第三方庫中。

檢查清單可以肯定的,我想你會發現像

Import-Package:android.dalvik. 

如果這是你可以手動刪除該頭測試包,看看有沒有幫助的情況下。當你清楚了,你可以解決它,例如通過在bnd中使該導入成爲可選項。

+0

+1。 Felix認爲這是一個Android項目,因爲你的捆綁包清單說它是一個Android項目!另一個建議是避免'Private-Package:*',因爲它真的會吸引所有* bnd在類路徑中看到的包中。至少將其限制在諸如'com.foo.myapplication。*'之類的名稱空間內。 – 2013-02-15 01:12:50

+0

另外:不,不要使用較舊版本的Felix,他們都會報告相同的問題。這個問題與Felix不同,它與捆綁包的構建方式有關。 – 2013-02-15 01:14:15

0

一個簡單的解決方案是:

轉到FuseESB控制檯:

鍵入命令:

的OSGi:安裝MVN:公地IO /公地IO/2.1

更換'common's-io'與你的依賴的組ID和神器ID(Maven) 例如我的依賴是:

<dependency> 
    <groupId>commons-io</groupId> 
    <artifactId>commons-io</artifactId> 
    <version>2.1</version> 
    <scope>provided</scope> 
</dependency> 

乾杯