Java 如何一次安装和启动osgi捆绑包,其中一个依赖于另一个

Java 如何一次安装和启动osgi捆绑包,其中一个依赖于另一个,java,osgi,osgi-bundle,peaberry,Java,Osgi,Osgi Bundle,Peaberry,我有两个包,比如A和B。A依赖于B(在A的清单中指定为必需的包:B) 现在我一个接一个地安装了A、B两个bundle(通过调用BundleContext.installBundle)。然后,当我尝试启动bundle A时,我得到以下错误 org.osgi.framework.BundleException: Could not resolve module: A [140] Unresolved requirement: Require-Bundle: B; bundle-version="

我有两个包,比如A和B。A依赖于B(在A的清单中指定为必需的包:B)

现在我一个接一个地安装了A、B两个bundle(通过调用BundleContext.installBundle)。然后,当我尝试启动bundle A时,我得到以下错误

org.osgi.framework.BundleException: Could not resolve module: A [140]
  Unresolved requirement: Require-Bundle: B; bundle-version="1.0.0"
我从例外情况中了解到,捆绑包B尚未启动(解决)。现在如何解决这个问题呢

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


顺便说一下,我使用的是equinox。

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

  • 安装A,安装B
  • 从A开始,从B开始
  • 而不是这个:

  • 安装,启动
  • 安装B,启动B
  • 在第二个(错误的)场景中,您将得到一个解析错误,因为a依赖于B,而就OSGi而言,B还不存在

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


    [顺便说一句,在你的问题中,你似乎把开始和解决混淆了:你说“B尚未启动(已解决)”。这完全是两码事。B只需要在启动A之前安装,OSGi会在需要时自动解决。]

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

  • 安装A,安装B
  • 从A开始,从B开始
  • 而不是这个:

  • 安装,启动
  • 安装B,启动B
  • 在第二个(错误的)场景中,您将得到一个解析错误,因为a依赖于B,而就OSGi而言,B还不存在

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


    [顺便说一句,在你的问题中,你似乎把开始和解决混淆了:你说“B尚未启动(已解决)”。这完全是两码事。B只需要在启动A之前安装,OSGi会在需要时自动解决它。

    @AdamArold没问题!谢谢@NeilBartlett@AdamArold没问题!谢谢@NeilBartlettIt听起来像是当你启动Bundle A时Bundle B还没有安装?框架在安装后会自动尝试解析B,您不必启动它。当您启动捆绑包A时,听起来好像捆绑包B还没有安装?框架安装后会自动尝试解析B,您不必启动它。