【问题标题】:Felix bundles failng to loadFelix 捆绑包无法加载
【发布时间】:2016-01-15 20:27:45
【问题描述】:

我正在尝试使用 Felix 依赖包在 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 存储库,它是我与我的应用程序一起使用的捆绑包的唯一版本!当他们的版本是我的捆绑包知道的唯一版本时,该版本与我的捆绑包怎么不兼容???

有人请指教。是什么导致了此故障,我该如何解决?

【问题讨论】:

  • 3 个 Felix DM 捆绑包是否处于活动/已解决状态?它们是什么版本,3.0.0、3.1.0 还是 3.2.0?
  • 这 3 个捆绑包显然无法解析(基于失败消息)。我错误地认为它在运行时包中,但它实际上在 org.apache.felix.dependencymanager 包中(我将在我的原始帖子中更正这一点)。 Amdatu 捆绑包附带的软件包版本是 4.0.2(我认为)。我怀疑我可能需要找到一个较早的版本。我会看看能不能找到一个并更新发生的情况......

标签: osgi apache-felix osgi-bundle


【解决方案1】:

问题在于我正在运行的运行时以及 Amdatu 插件中的错误。

我不建议在您的 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 网站手动下载依赖包并将它们包含在我的构建和运行时环境中。不幸的是,Bndtools 和 Amdatu 都没有提供任何方法来在选择模板后将 Amdatu 包添加到项目中。这意味着您不必使用来自 Amdatu 的现成包,而必须前往源站点并手动包含它们。

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

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

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

【讨论】:

  • “Bndtools... 都不提供在选择模板后添加捆绑包的任何方式”。一点都不真实!!只需将捆绑包拖放到您的存储库中即可。工具栏上还有一个“添加”按钮。这种错误信息对任何人都没有帮助。
  • 澄清:我所指的包是Amdatu 模板提供的Amdatu 包。如果您选择 :Bundle-Hub" 模板,则“Amdatu”模板提供的存储库将无法访问。因此,一旦您选择了另一个模板,就无法在 Amdatu 存储库中添加捆绑包。
  • 仍然不是真的!模板只是起点......您可以在创建工作区后添加/删除存储库并在存储库中添加/删除包。
  • 请重新阅读我的说明。这是非常具体的。我已经声明在选择“Bundle-Hub”模板后我无法添加 Amdatu 存储库。与其在没有具体细节的情况下坚持其他方式,不如概述在使用“Bundle-Hub”模板启动捆绑项目后添加 Amdatu 存储库的确切步骤。没有明显的方法可以做到这一点(尝试了不同的方法并且失败了,我很想知道你会如何做到这一点)。如果您不知道,请说出如何,而不是仅仅说我观察到的“不是真的”......
猜你喜欢
  • 2016-12-17
  • 2011-11-07
  • 2021-04-23
  • 1970-01-01
  • 2020-07-29
  • 1970-01-01
相关资源
最近更新 更多