java - 第三方 bundle 导入并使用系统 bundle 导出的任何版本的包

标签 java osgi equinox

我有两个第三方包,它们都依赖于 javax.transaction 包。该软件包由系统 bundle 导出为版本 0.0.0。其中一个包导入该包的任何版本,并将其声明为其导出包的使用约束。另一个 bundle 明确需要版本 1.1.0。该软件包由不同的 bundle 提供。

我自己的 bundle 需要两个第三方 bundle 。但是,由于系统 bundle 首先被解析,因此接受任何版本的第三方 bundle 都会针对版本 0.0.0 连接。结果,出现了包使用冲突。

有哪些选项可以解决此问题?

最佳答案

选项 1:

将版本附加到导入 javax.transaction 的每个包中的 Import-Package。我不会建议这样做。 :)

选项 2:

不要在引导委托(delegate)中导入 javax.transaction 包。我们也是这么做的。您可以通过 org.osgi.framework.system.packages 系统变量设置应导入的包。要查看示例,请在 this pom 中查找变量名称。文件。有一个关于 felix 的示例,还有一个关于春分的示例。

使用此选项,您可能会遇到 javax.sql 依赖于 javax.transaction.xa 包的问题。在这种情况下,您可以使用可用的 bundle 中的 javax.sql here (JDBC 版本 4.0.0)。当然,您还必须从引导委派中排除 javax.sql 包(示例中排除了它们)。

由于 javax.transaction.xa 仅用于 javax.sql,而 javax.sql 不用于任何其他 JDK 包,这些包可以安全地从 bundle 中分离出来并使用。

关于java - 第三方 bundle 导入并使用系统 bundle 导出的任何版本的包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22771298/

相关文章:

java - OSGIfied jar 可以像普通 jar 一样工作吗?

java-8 - OSGI - Java 8 -> 9 迁移(需求能力问题)

java - 从 Equinox/Eclipse 获取对象

用于视频 session 的 JAVA 库以及如何使用 libjitsi?

java - 如何在 intellij 中搜索枚举文件类型

java - OSGI 中的 Websocket 客户端

java - 在计算中使用正则表达式反向引用(Java、Netbeans 以及不仅如此)

java - Equinox 中的 Sling 日志记录配置

java - 如何绘制如下图所示的形状

java - 从 SVG 文件创建非缓冲的 java.awt.Image