如何一次安装并启动 osgi 捆绑包,其中一个依赖于其他捆绑包
How to Install and Start to osgi bundles at a time with one of them depending on other
我有两个包,比如 A 和 B。A 依赖于 B(在 A 的 MANIFEST 中指定为 Required-Bundle:B)。
现在我一个一个地安装了 A、B 包(通过调用 BundleContext.installBundle)。然后当我尝试启动 bundle A 时,出现以下错误
org.osgi.framework.BundleException: Could not resolve module: A [140]
Unresolved requirement: Require-Bundle: B; bundle-version="1.0.0"
我从异常中了解到 bundle B 尚未启动(已解决)。现在怎么解决这个问题?
解决这个问题的唯一方法是按依赖项对包进行排序?
要么
是否有任何选项,例如为 OSGi 运行时指定一个文件夹,以便激活复制到它的任何捆绑文件?
顺便说一下,我正在使用 equinox。
确保在启动 ANY 之前安装 ALL 的捆绑包。 IE。你需要这样做:
- 安装 A,安装 B
- 开始A,开始B。
而不是这个:
- 安装A,启动A
- 安装B,启动B
在第二种(错误的)情况下,您将收到解析错误,因为 A 依赖于 B,而 B 就 OSGi 而言尚不存在。
在第一个(正确的)场景中,当您启动 A 时,OSGi 会计算出它需要同时解析 A 和 B 以满足依赖关系。
[顺便说一句,在你的问题中,你似乎从解决开始感到困惑:你说 "B is not yet started(resolved)"。这些完全是不同的东西。 B只需要在你启动A之前安装,OSGi会在需要的时候自动解析。]
我有两个包,比如 A 和 B。A 依赖于 B(在 A 的 MANIFEST 中指定为 Required-Bundle:B)。
现在我一个一个地安装了 A、B 包(通过调用 BundleContext.installBundle)。然后当我尝试启动 bundle A 时,出现以下错误
org.osgi.framework.BundleException: Could not resolve module: A [140]
Unresolved requirement: Require-Bundle: B; bundle-version="1.0.0"
我从异常中了解到 bundle B 尚未启动(已解决)。现在怎么解决这个问题?
解决这个问题的唯一方法是按依赖项对包进行排序? 要么 是否有任何选项,例如为 OSGi 运行时指定一个文件夹,以便激活复制到它的任何捆绑文件?
顺便说一下,我正在使用 equinox。
确保在启动 ANY 之前安装 ALL 的捆绑包。 IE。你需要这样做:
- 安装 A,安装 B
- 开始A,开始B。
而不是这个:
- 安装A,启动A
- 安装B,启动B
在第二种(错误的)情况下,您将收到解析错误,因为 A 依赖于 B,而 B 就 OSGi 而言尚不存在。
在第一个(正确的)场景中,当您启动 A 时,OSGi 会计算出它需要同时解析 A 和 B 以满足依赖关系。
[顺便说一句,在你的问题中,你似乎从解决开始感到困惑:你说 "B is not yet started(resolved)"。这些完全是不同的东西。 B只需要在你启动A之前安装,OSGi会在需要的时候自动解析。]