我有两个包说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运行时指定一个文件夹,以便激活复制到它的任何包文件?
顺便说一下,我正在使用昼夜平分点。
答案 0 :(得分:4)
确保在开始 ANY 之前安装所有捆绑包。即你需要这样做:
而不是这个:
在第二个(错误的)场景中,你会得到一个分辨率错误,因为A依赖于B而且就OSGi而言,B还没有存在。
在第一个(正确的)场景中,当您启动A时,OSGi将确定它需要解析A和B以满足依赖关系。
[顺便说一句,在你的问题中,从解决开始你似乎很困惑:你说" B尚未开始(已解决)"。这完全是不同的事情。 B只需要在启动A之前安装,OSGi会在需要时自动解决。]