我有一個大型的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))」
這沒有幫助。我究竟做錯了什麼?任何其他指針?
+1。 Felix認爲這是一個Android項目,因爲你的捆綁包清單說它是一個Android項目!另一個建議是避免'Private-Package:*',因爲它真的會吸引所有* bnd在類路徑中看到的包中。至少將其限制在諸如'com.foo.myapplication。*'之類的名稱空間內。 – 2013-02-15 01:12:50
另外:不,不要使用較舊版本的Felix,他們都會報告相同的問題。這個問題與Felix不同,它與捆綁包的構建方式有關。 – 2013-02-15 01:14:15