【问题标题】:How to access a class from a bundle of lower version?如何从较低版本的捆绑包中访问一个类?
【发布时间】:2015-02-15 05:21:07
【问题描述】:

我有两个同名的 OSGi 包。但是有版本不同。假设一个包的版本是 1.0 ,另一个是 2.0 。因为 2.0 是更高版本,所以它的优先级将是第一位的。但我也想使用 bundle 1.0 中的一段代码。我怎样才能做到这一点??

【问题讨论】:

    标签: osgi aem osgi-bundle


    【解决方案1】:

    当 OSGi 选择从哪里导入包时,包版本并不重要。唯一的限制是您不能安装具有相同符号名称和版本的两个包。

    您需要对捆绑包导出的包进行版本控制。如果需要,可以使用不同的版本导出每个包。然后,您可以在客户端捆绑包中导入具有允许版本范围的每个所需包。

    所以 bundle 1.0 可以导出 1.0 版本的包 a 和 1.1 版本的包 b。 Bundle 2.0 可以导出 2.0 版本的包 a 和 1.2 版本的包 b。

    然后你可以在客户端包中

    • 导入包 a 的版本范围为 [1.0,2.0) -> 将解析为从 bundle 2.0 包 a
    • 导入版本范围为 [1.1,1.2) 的包 b -> 将解析为来自 bundle 1.0 的包 b

    不过,您只能在包级别执行此操作。所以你不能从不同的包访问同一个包中的类 - 至少不能不摆弄类加载器......你应该避免。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-10
      • 1970-01-01
      • 2013-08-25
      • 2013-11-24
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 2014-03-02
      相关资源
      最近更新 更多