【问题标题】:Packing multiple OSGi bundles in the same jar在同一个 jar 中打包多个 OSGi 包
【发布时间】:2013-12-07 12:58:40
【问题描述】:

我是 OSGi 平台的新手。

有一个 OSGi 包 B1 依赖于另一个包 B2,这很可能不是由容器提供的,我可以将两个包打包在同一个 jar 中吗?

如果是:怎么做?如果安装了jar 并且已经安装了捆绑软件会发生什么?

【问题讨论】:

  • 只是好奇你为什么要这样做?您可以同时加载 B1 和 B2 包。
  • @codesalsa 因为我们不能强迫某人(非技术人员)下载两个文件。实际上有一个基于 OSGi 的插件框架,安装这种插件最常用的方法是提供一个 jar 文件(它是一个包)。

标签: osgi osgi-bundle


【解决方案1】:

虽然 OSGi 不直接支持同一个 jar 中的多个包,但在同一个归档中存在多个包的标准,它解决了您试图解决的分发问题。不幸的是,它可能会在您的场景中引入一个额外的问题,因为它是企业 OSGi 的一部分,而不是核心 OSGi,因此它不会是基本 Equinox 或 Felix 框架的一部分。如果您对用户使用的起始平台有更多控制权,它可能会满足您的需求。

基本思想是将所有捆绑包打包成一个带有 .esa 扩展名的 zip 文件,以及一个简单的清单。然后,您可以分发 esa 文件。本教程包含更多详细信息: http://coderthoughts.blogspot.co.uk/2013/04/osgi-subsystems.html?m=1

【讨论】:

    【解决方案2】:

    是的,你可以这样做……有点。

    通常 OSGi 包是 JAR 文件,因为它们需要有一个 META-INF/MANIFEST.MF。 OSGi 框架无法直接读取您的“多捆绑”JAR。

    但是,在 OSGi 中安装包需要调用 BundleContext.installBundle 方法。该方法有两种风格,一种以 InputStream 为参数;这个 InputStream 应该提供 OSGi 包的内容。因此,您可以使用您的大 JAR 并使用 JarInputStream 读取它,将各个条目传递给 installBundle 方法。

    【讨论】:

    • 我看到你有一本免费的好书:“OSGi in Practice”在你的网站上。非常感谢你,尼尔!!!
    猜你喜欢
    • 2010-10-20
    • 2011-10-06
    • 2018-04-28
    • 2015-07-05
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 2014-03-13
    • 2023-03-27
    相关资源
    最近更新 更多