嗨,我是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 回答
看起来你正在使用maven-bundle-plugin来生成自己的包 . 在这种情况下,只需确保您的camel等依赖项是提供范围而不是编译范围
这将确保您的bundle仅包含它所需的依赖项 .
这完全取决于你的清单的样子:
您不导入包(使用Import-Package,Require-Bundle或Dynamic-Import-Package):所有类仅从您的包类路径加载
您使用可选标志导入包:如果包可用,它将从OSGi框架中获取,否则它将搜索您的包类路径
您使用Dynamic-Import-Package导入包:框架将搜索您的包,然后搜索导出包的其他包
所以通常你选择导入包所有依赖项,但你也可以将它们嵌入你的jar中,这一切都取决于你的用例 .