【发布时间】:2018-04-28 06:41:17
【问题描述】:
我有一个使用 maven 的 OSGi 设置。 父包的 pom.xml 依赖于 JAR A,而 JAR A 又依赖于 JAR B(版本 1)。 父母有 2 个孩子捆绑。子捆绑包 1 使用带有版本 1 的 JAR B。 子捆绑包 2 需要版本 2 的 JAR B。 JAR 不向后兼容。所以我无法将 JAR B 的版本从 1 升级到 2。 我需要在 bundle 1 中使用 JAR 的第 1 版,在 bundle 2 中使用同一 JAR 的第 2 版,并且在类加载中没有任何错误。
现在,我在类加载中遇到一个错误,其中任何一个包由于使用 2 个版本而导致 NoClassDefFound 错误而失败。
如何使用 OSGi 解决这种依赖关系?
【问题讨论】:
-
到目前为止,您只描述了您的 Maven 设置。在 OSGi 中,这无关紧要,在 OSGi 的运行时,清单包含哪些 Import-Package 和 Export-Package 语句很重要。您可以将此添加到您的问题中吗?另一件事。您如何创建捆绑包的清单?
-
@ChristianSchneider 我没有在两个包的 Import-Package 和 Export-Package 中添加有关 JAR B 的信息。但是,我在 bundle 2 的 Require-Bundle 属性中添加了“bundle 1”。这有什么影响吗?
-
你不应该使用 Require-Bundle。而是让 bnd 通过 maven-bundle-plugin 或 bnd-maven-plugin 为您编写 Manifest。像 gjoranv 提议的那样嵌入依赖也是可能的。