首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Felix捆绑包加载失败

Felix捆绑包加载失败
EN

Stack Overflow用户
提问于 2015-10-17 08:32:29
回答 1查看 281关注 0票数 1

我正在尝试使用Felix依赖包在Apache Felix上运行一个应用程序。由于某种原因,容器没有加载我的包。

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

我关心的捆绑包是我的“运行需求”中的捆绑包:

代码语言:javascript
代码运行次数:0
运行
复制
org.apache.felix.dependencymanager
org.apache.felix.dependencymanager.shell
org.apache.felix.dependencymanager.runtime
osgi.core
osgi.cmpn

上面的所有包都取自Amdatu存储库。

我创建了两个包:

代码语言:javascript
代码运行次数:0
运行
复制
com.test.demo.reader
com.test.demo.listener

这些包是使用org.apache.felix.dependencymanager和osgi.core构建的。

当我尝试运行OSGi时,我得到了以下失败:

代码语言:javascript
代码运行次数:0
运行
复制
! 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)))]]

代码语言:javascript
代码运行次数: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)))

还有更多

代码语言:javascript
代码运行次数: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存储库,它是我在应用程序中使用的包的唯一版本!当他们的版本是我的捆绑包唯一知道的版本时,他们的版本怎么会与我的捆绑包不兼容呢?

有没有人能给点建议。导致此故障的原因是什么?我如何修复它?

EN

回答 1

Stack Overflow用户

发布于 2015-10-18 13:03:52

问题出在我正在运行的运行时,以及Amdatu插件中似乎有一个bug。

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

我从Amdatu使用的各种Felix依赖包显然是打算在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提供的现成包,而必须找到源站点并手动将其包含在内。

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

同时,既然我已经设置了正确的运行时环境,我的应用程序就可以顺利地运行了。

特别感谢earcam,上面评论中的问题给了我一个线索,让我知道应该从什么开始解决这个问题……

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33181423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档