OSGI中的依赖关系管理捆绑ServiceMix

时间:2014-09-08 05:40:19

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

您好我是ServiceMix的新手,所以我可能会问同样的问题,但可能无法解决,但我无法理解。

我怀疑在ServiceMix OSGI中使用bundle时如何管理编译时与运行时依赖性。也就是说,如果我使用maven构建一个.jar可行(通过单元测试aleast)工件,其中所有编译时依赖性说示例(camel,spring)由pom.xml依赖项处理,并根据需要加载到jar中以便成功构建。因此,当我在OSGI中部署jar时,那些libs(camel,spring)已经存在于maven生成的jar中。现在作为OSGI包我在运行时从容器支持相同的bundle(camel,spring)。

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

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

由于

2 个答案:

答案 0 :(得分:0)

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

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

这将确保您的捆绑包仅包含所需的依赖项。

答案 1 :(得分:0)

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

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

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