Felix捆绑无法加载

时间:2015-10-17 00:32:29

标签: osgi apache-felix osgi-bundle

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

我在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存储库,它是我在我的应用程序中使用的捆绑包的唯一版本!如果版本是我的捆绑包知道的唯一版本,那么该版本与我的捆绑包有什么不兼容?

有人请指教。造成这种失败的原因是我如何解决?

1 个答案:

答案 0 :(得分:-1)

问题在于我运行的运行时以及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版提供了正确的捆绑包,但没有为用户提供该环境。

我确实尝试手动更改版本5.2的运行时环境。这不起作用,因为当您选择模板时,Bndtools会将与模板关联的运行时放在一起。由于Amdatu模板不包含Felix版本5,因此运行时环境不可用。

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

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

与此同时,由于我已经设置了正确的运行时环境,我的应用程序运行顺畅。

特别感谢earcam,他在上面评论中提出的问题让我了解了解决这个问题的方法......