首页 文章

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

提问于
浏览
1

嗨,我是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 _1755661之内的那个 . 虽然我知道MANIFEST文件提供了选项,如 Import Packages ,它有助于从容器中的其他OSGI包导入依赖项

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

谢谢

2 回答

  • 0

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

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

    这将确保您的bundle仅包含它所需的依赖项 .

  • 0

    这完全取决于你的清单的样子:

    • 您不导入包(使用Import-Package,Require-Bundle或Dynamic-Import-Package):所有类仅从您的包类路径加载

    • 您使用可选标志导入包:如果包可用,它将从OSGi框架中获取,否则它将搜索您的包类路径

    • 您使用Dynamic-Import-Package导入包:框架将搜索您的包,然后搜索导出包的其他包

    所以通常你选择导入包所有依赖项,但你也可以将它们嵌入你的jar中,这一切都取决于你的用例 .

相关问题