Felix捆绑failng加载

问题描述:

我正在尝试使用Felix Dependency捆绑包在Apache Felix上运行应用程序。由于某种原因,容器不能加载我的包。Felix捆绑failng加载

我正在使用Eclipse中的Bndtools进行开发。我正在使用Amdatu包。

我关心的束是在我的“运行要求”包:

org.apache.felix.dependencymanager 
org.apache.felix.dependencymanager.shell 
org.apache.felix.dependencymanager.runtime 
osgi.core 
osgi.cmpn 

上述所有的包都从Amdatu仓库取。

我有我创建了两个包:

com.test.demo.reader 
com.test.demo.listener 

而且这些捆绑使用org.apache.felix.dependencymanager和osgi.core建成。

当我尝试运行OSGi中,我得到了以下故障:

! could not resolve the bundles: [com.test.demo.reader-1.0.0 Unresolved constraint in bundle 
com.test.demo.reader [8]: Unable to resolve 8.0: missing requirement 
[8.0] osgi.wiring.package; (&(osgi.wiring.package=org.apache.felix.dm)(version>=3.0.0)(!(version>=4.0.0))), 
com.test.demo.listener-1.0.0 Unresolved constraint in bundle com.test.demo.listener [9]: 
Unable to resolve 9.0: missing requirement [9.0] osgi.wiring.package; 
(&(osgi.wiring.package=com.test.demo.reader)(version>=1.0.0)(!(version>=2.0.0))) 
[caused by: Unable to resolve 8.0: missing requirement [8.0] osgi.wiring.package; 
(&(osgi.wiring.package=org.apache.felix.dm)(version>=3.0.0)(!(version>=4.0.0)))]] 

! Failed to start bundle com.test.demo.reader-1.0.0, exception Unresolved constraint in 
bundle com.test.demo.reader [8]: Unable to resolve 8.0: missing requirement [8.0] 
osgi.wiring.package; (&(osgi.wiring.package=org.apache.felix.dm)(version>=3.0.0) 
(!(version>=4.0.0))) 

! Failed to start bundle com.test.demo.listener-1.0.0, exception Unresolved constraint in 
bundle com.test.demo.listener [9]: Unable to resolve 9.0: 
missing requirement [9.0] osgi.wiring.package; (&(osgi.wiring.package=com.test.demo.reader) 
(version>=1.0.0)(!(version>=2.0.0))) [caused by: Unable to resolve 8.0: missing requirement 
[8.0] osgi.wiring.package; (&(osgi.wiring.package=org.apache.felix.dm)(version>=3.0.0) 
(!(version>=4.0.0)))] 

我想我明白发生了什么:显然,正在使用的org.apache.dm软件包是一个与我的软件包不兼容的版本。但这没有任何意义,因为根据Felix文档,org.apache.dm包位于org.apache.felix.dependencymanager包中。该软件包来自Amdatu存储库,它是我用于我的应用程序的唯一版本的软件包!当它们是我的捆绑包知道的唯一版本时,该版本与我的捆绑软件不兼容?

有人请指教。是什么导致了这个失败,我该如何修复它?

+0

处于主动/ resolved状态的3个菲利克斯DM包?它们是什么版本,3.0.0,3.1.0或3.2.0? – earcam

+0

3捆绑显然无法解决(基于失败消息)。我错误地认为它在运行时包中,但它实际上是在org.apache.felix.dependencymanager包中(我将在我的原始文章中更正这个)。 Amdatu软件包附带的软件包版本是4.0.2(我认为)。我怀疑我可能需要找到更早的版本。我会看看我是否可以找到并更新发生的事情...... –

问题是我运行的运行时间和Amdatu插件中的错误。

我不会建议在您的OSGi项目中使用Amdatu配置。不是目前的形式。

我从Amdatu使用的各种Felix Dependency捆绑软件显然是打算在Felix版本5下运行。不幸的是,Amdatu环境(当您为项目选择配置模板时可以选择的“Amdatu配置” )不加载版本5.当您选择“Bundle-Hub配置”时,您选择的运行时环境包括从版本4.0.2到版本5.2的所有Felix环境以及多个版本的Equinox。当您选择“Amdatu配置”时,只有运行时选择是Felix 4.0.2和Felix 4.2.0。

我正在使用4.2.0 Felix,结果是依赖包不起作用。

目前形式的Amdatu环境在Bndtools中无法使用。它显然为版本5提供了正确的捆绑包,但不为用户提供该环境。

我尝试手动更改运行时环境io版本5.2。这不起作用,因为显然当你选择一个模板时,Bndtools会将任何运行时间与模板关联起来。由于Amdatu模板不包含Felix版本5,因此运行时环境不可用。

为了让我的应用程序运行,我必须创建一个使用“Bundle-Hub”模板的新项目,并从Felix网站手动下载依赖项包,并将它们包含在我的buil和运行时环境中。不幸的是,在选择模板之后,Bndtools和Amdatu都没有提供任何方式将Amdatu包添加到项目中。这意味着您不必使用Amdatu现成的捆绑包,而必须到源网站并手动包含它们。

我可能会ty并找到一种方法来创建一个可以包含在项目中并包含所有Amdatu包的新存储库,然后将该存储库包含在“Bundle Hub”模板中。我还会向Amdatu人员报告环境问题(以及我见过的其他问题)。

与此同时,我的应用程序运行正常,现在我已经设置了正确的运行环境。

特别感谢earcam,其上述问题在评论给了我一个线索如何开始寻找解决这个问题...

+0

“既不Bndtools ...提供任何方式来添加模板后选择”。根本不真实!只需拖放到您的回购捆。工具栏上还有一个“添加”按钮。这种错误信息帮助没有人。 –

+0

澄清:我所指的捆绑包是与Amdatu模板一起提供的Amdatu捆绑包。如果您选择:Bundle-Hub“模板,那么由”Amdatu“模板​​提供的存储库变得无法访问。因此,一旦选择了另一个模板,无法在Amdatu存储库中添加这些包。 –

+0

仍然不是真实的!模板只是起点......你可以在创建工作空间后添加/删除存储库并在存储库中添加/删除包 –