2013-02-14 29 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> 

干杯