我有一个大型 Java 应用程序,它主要是网络和文件处理,具有大量数据库访问权限。没有用户界面。我们暴露了一些 Web 服务(嵌入式 Netty)并调用了一些外部的 REST Web 服务。该项目是用 Ant 构建的。它大约有 10 个不同的罐子加上 30-40 个库。
我当前的任务是将项目移至 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 shell 我可以安装包,但是当我启动它时,我得到了这个:
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))”
那没有帮助。我究竟做错了什么?还有其他指针吗?