OSGi的依赖管理

Mic*_*che 2 java osgi maven

我想根据OSGi规范开发一个多模块应用程序.我们假设我的一个模块使用Apache Commons Logging 1.1.1.Spring Apache Commons Logging 1.1.1在其存储库中提供了捆绑版本,因此我可以在我的POM中添加相应的依赖项.

如果我安装我的包中Apache Felix,例如,是不是该依赖性Apache Commons Logging 1.1.1不会,直到我安装的捆绑解决Apache Commons Logging 1.1.1呢?我的包将尝试导入尚未导出的包.

我真的不明白依赖管理在OSGi世界上是如何运作的.我应该安装我的应用程序需要的每个包吗?另外,我不明白它如何与Maven集成?

提前感谢您的解释


编辑:我已经看到有一个名为OBR的Apache Felix子项目似乎可以促进捆绑管理(例如部署).但是,我们已经拥有了一个带有本地存储库,私有存储库的Maven架构...... OBR如何与Maven集成?

Chr*_*der 7

如果你想将OSGi与maven一起使用,那么我推荐Apache Karaf作为可以使用Felix OSGi框架的服务器.优点是您可以使用mvn:urls直接从maven存储库安装捆绑包.

如果您只使用Apache Karaf和maven repo,那么您在运行时就没有传递解析.您必须安装所需的所有软件包.很有帮助的是karaf具有功能概念.因此,您可以将这些功能用作粗粒度构建块.您还可以在引用其他功能和捆绑包时创建自己的功能.这允许使用一个命令安装整个应用程序.

Felix和Karaf也支持OBR,但您必须创建自己的OBR回购.目前没有公共OBR回购.OBR的优点是它可以解决大多数传递依赖性.Karaf甚至可以与OBR一起工作,因此您可以在功能中列出一些顶级捆绑包,让OBR解决剩下的问题.

在实践中,我对没有OBR的简单Karaf功能有很好的体验.这是一些手工工作,但比你预期的要少,而且工作得很好.