OSGi Bundle 通过另一个 bundle 加载

OSGi Bundle getting Loaded through another bundle

我遇到一个问题,我的一个包通过另一个包加载,即使这两个包彼此没有任何直接依赖性。这是场景。

我有 3 个捆绑包。 Bundle A, B & C。流程是A->B->C。因此 A 和 C 之间没有依赖关系。

当我部署这 3 个时,由于某种原因,bundle C 通过 bundle A 加载。我正在使用 Jboss Fuse 并通过 karaf 控制台,当我在 bundle 上执行 dev:show-tree A,它显示捆绑 C 连接到捆绑 A。

如果我删除包 A,包 C 会自行加载,我也不会收到任何错误。

我已经检查了 A 和 C 的 features.xml 文件和 pom,看它们是否有任何依赖关系,但找不到任何东西。

是否有人对我还可以尝试什么有任何想法,或者我缺少什么?

也许您在 bundle A 中有一个可选的 Import-Package 由 bundle C 导出。看看 package:exports 和 bundle:headers。

看起来像是纯粹的传递依赖。从 OSGI in action book 的“2.5.3 Code visibility”部分,这里是 Transitive dependency 的定义。 “当 bundle A 依赖包时会发生传递依赖 来自 bundle B 和 bundle B 又依赖于来自 bundle C 的包。要使用 bundle A,你需要同时解决bundle B和bundle C的依赖。"

你的 bundle A 可能会暴露一个比 bundle C 使用的包更高版本的包。

此致, 戈帕尔