如何根据其他

时间:2016-01-19 12:39:14

标签: java osgi osgi-bundle peaberry

我有两个包说A和B. A取决于B(在A的MANIFEST中指定为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尚未启动(已解决)。现在如何解决这个问题?

解决这个问题的唯一方法是按照依赖关系对bundle进行排序? 要么 是否有任何选项,比如为OSGi运行时指定一个文件夹,以便激活复制到它的任何包文件?

顺便说一下,我正在使用昼夜平分点。

1 个答案:

答案 0 :(得分:4)

确保在开始 ANY 之前安装所有捆绑包。即你需要这样做:

  1. 安装A,安装B
  2. 启动A,开始B。
  3. 而不是这个:

    1. 安装A,启动A
    2. 安装B,启动B
    3. 在第二个(错误的)场景中,你会得到一个分辨率错误,因为A依赖于B而且就OSGi而言,B还没有存在。

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

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