0

我有两个捆绑包 A 和 B。A 取决于 B(在 A 的清单中指定为Required-Bundle:B)。

现在我一个一个地安装了 A、B 包(通过调用 BundleContext.installBundle)。然后,当我尝试启动捆绑包 A 时,出现以下错误

org.osgi.framework.BundleException: Could not resolve module: A [140]
  Unresolved requirement: Require-Bundle: B; bundle-version="1.0.0"

我从异常中了解到捆绑 B 尚未启动(已解决)。现在如何解决这个问题?

解决此问题的唯一方法是按其依赖项对捆绑包进行排序?或者是否有任何选项,例如为 OSGi 运行时指定一个文件夹,以便激活复制到其中的任何捆绑文件?

顺便说一句,我正在使用春分。

4

1 回答 1

4

确保在启动任何捆绑包之前安装所有捆绑包。即你需要这样做:

  1. 安装A,安装B
  2. 开始A,开始B。

而不是这个:

  1. 安装 A,启动 A
  2. 安装 B,启动 B

在第二种(错误的)场景中,您将收到解析错误,因为 A 依赖于 B,而 B 就 OSGi 而言尚不存在。

在第一个(正确的)场景中,当您启动 A 时,OSGi 将计算出它需要同时解析 A 和 B 以满足依赖关系。

[顺便说一句,在您的问题中,您似乎从解决开始就感到困惑:您说“B尚未开始(已解决)”。这些是完全不同的事情。B只需要在你启动A之前安装好,OSGi会在需要的时候自动解析。]

于 2016-01-19T14:24:17.343 回答