【问题标题】:Dependency management in OSGI bundle ServiceMixOSGI bundle ServiceMix 中的依赖管理
【发布时间】:2014-11-01 07:19:36
【问题描述】:

您好,我是 ServiceMix 的新手,所以我可能会问同样的问题,可能会回答但我无法弄清楚。

我的疑问是在 ServiceMix OSGI 中使用 bundle 时如何管理编译时间和运行时依赖关系。也就是说,如果我正在使用 maven 构建一个 .jar 可行的(至少通过单元测试)工件,其中所有编译时依赖项都说 example(camel,spring) 由 pom.xml 依赖项处理,并根据需要加载到 jar 库中以成功构建。因此,当我在 OSGI 中部署 jar 时,这些库(camel,spring)已经存在于 maven 生成的 jar 中。现在作为 OSGI 捆绑包,我在运行时从容器支持相同的捆绑包(camel,spring)。

所以我很困惑我的代码选择执行所需依赖包的方式或副本。是 .jar 中的 还是 OSGI 容器提供的。虽然我知道 MANIFEST 文件提供了选项,例如 Import Packages 有助于从容器中的其他 OSGI 包导入依赖项

可能是我在这里遗漏了一些使用 OSGI 的关键点,所以如果我对任何假设有误,请纠正我并提供一些指示/建议

谢谢

【问题讨论】:

    标签: osgi dependency-management apache-karaf osgi-bundle apache-servicemix


    【解决方案1】:

    看起来您正在使用 maven-bundle-plugin 来生成自己的包。 在这种情况下,只需确保您对骆驼等的依赖项是提供范围而不是编译范围

    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-core</artifactId>
        <scope>provided</scope>
    </dependency>
    

    这将确保你的包只包含它需要的依赖项。

    【讨论】:

    • 感谢您的回复。它有帮助,还通过链接stackoverflow.com/questions/6646959/… 我现在明白范围=提供的状态包括对编译和测试类路径的依赖。运行时类路径中的依赖项是由容器提供的,可以是 JEE 或 OSGI 等
    【解决方案2】:

    这完全取决于清单的外观:

    • 您不导入包(使用 Import-Package、Require-Bundle 或 Dynamic-Import-Package):所有类仅从您的包类路径加载
    • 您使用可选标志导入包:如果包可用,它将从 OSGi 框架中获取,否则它将搜索您的包类路径
    • 您使用 Dynamic-Import-Package 导入包:框架将搜索您的包,然后搜索其他包导出包

    所以通常你选择导入包所有依赖项,但你也可以将它们嵌入到你的 jar 中,这完全取决于你的用例。

    【讨论】:

      猜你喜欢
      • 2013-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-20
      • 1970-01-01
      • 2013-01-12
      • 2013-10-28
      相关资源
      最近更新 更多