gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:59:44 27 4
gpt4 key购买 nike

我有两个第三方包,它们都依赖于 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com