代码之家  ›  专栏  ›  技术社区  ›  Chris

绑定OSGi相关库的标准方法是什么?

  •  5
  • Chris  · 技术社区  · 14 年前

    我有一个项目引用了许多开放源码库,有些是新的,有些不是那么新的。也就是说,它们都是稳定的,我希望继续使用我选择的版本,直到有时间迁移到较新的版本(我昨天测试了hsqldb 2.0,它包含许多API更改)。

    我希望嵌入的库之一是Jasper Reports,但正如大家都知道的,它附带了大量支持JAR文件,我只需要山的一个子集(已知),因此我计划自定义绑定所有依赖库。

    所以:

    • 是否每个人都为他们正在使用的开放源码库定制自己的OSGi包,或者是否有公共库的OSGi版本的主源代码?

    • 此外,我还认为对于我的每一个包来说,简单地将它们依赖的jar嵌入到包本身中要简单得多。这有可能吗?如果我选择将第三方FOC库嵌入到一个包中,我假设需要生成2个JAR文件,其中一个没有嵌入库(对于通过标准类加载器通过类路径加载的库),以及一个包含嵌入库的OSGi版本,因此我应该选择这样的包名称<<myprojectname>>-<<子项目>>-OSGi-.1.0.0.jar?

    • 如果我不能嵌入开源库并选择自定义绑定开源库(通过bnd),我应该选择一个唯一的绑定名称来避免与可能的官方绑定冲突吗?例如<<myprojectname>>-<<3rdpartylibname>-<<3rdpartylibversion>.jar?

    • 我的非OSGi启用项目目前通过service.providers(…)扫描各种插件jar中的META-INF文件夹来扫描自定义插件。如果我去OSGi,这个机制还能工作吗?

    6 回复  |  直到 14 年前
        1
  •  7
  •   Robin    14 年前

    我宁愿不嵌入依赖的jar(是的,这是可能的)。它导致两个问题,

    1)此代码不可重复使用。许多捆绑包可能只是做相同的事情(嵌入同一个jar),最终会安装同一个jar多次。您可以争辩说,您的包也可以为嵌入式JAR导出接口,但这会变得很难看,因为您的包不应该负责公开该代码。它还使公开库的多个版本或同一版本的多个提供程序变得更容易。

    2)这是Eclipse特有的——嵌入式JAR在开发环境中无法正确解析(仍在运行时工作)。我的包可能依赖于我的目标平台中的包,它将无法解析嵌入JAR中的元素,必须将它们导入工作区才能工作。

    我发现大多数开源的jar已经很友好了 bundled by the nice folks at Spring . 还有其他的回购,但不幸的是,我失去了与它们的链接。

        2
  •  2
  •   Patrick Hendricks    14 年前

    也许你在找类似的东西 Maven ?但是,不确定如何与OSGi一起工作。您可以在这里找到有关Jasper报告的一些信息: http://mvnrepository.com/artifact/jasperreports/jasperreports

        3
  •  2
  •   James Branigan    14 年前

    Eclipse轨道项目还从许多常用的第三方jar中生成了包。

    http://www.eclipse.org/orbit/

        4
  •  1
  •   James Branigan    14 年前

    对你提出的问题要具体一些。

    每个人都不是自己做的。有关将第三方库的Eclipse打包为包的链接,请参阅我以前的答案。如果你找不到已经打包的版本,你必须自己制作。

    最好将二进制依赖项包装在它们自己的包中,而不是将JAR作为二进制包含到代码包中。选择任何你想要的包名称,它的包的导入和导出都很重要。名称间隔捆绑包名称和项目名称将确保不会发生冲突。

    要访问包存储区域进行扫描并非不可能,但它往往需要有关如何/在何处提取包的特定于OSGi运行时的信息。所以这是可能的,但并不容易。

        5
  •  1
  •   Aravind Yarram    14 年前

    Spring已经创建了大多数开源库的OSGi包,我在其中看到了Jasper报告。查看他们的捆绑存储库@ http://www.springsource.com/repository/app/bundle

        6
  •  0
  •   cues7a    14 年前

    我们一直在使用 Maven 使用OSGi,我们在pom.xml中声明包依赖项,您不再需要担心它们了。