Osgi ApacheCave解决了什么问题

Osgi ApacheCave解决了什么问题,osgi,apache-karaf,karaf,obr,Osgi,Apache Karaf,Karaf,Obr,我目前使用karaf和artifactory作为我的osgi jar存储库。这很有效。我遇到过ApacheCave工具for Karaf,它看起来非常像一个存储库,只是它也可以存储在数据库或其他数据源中,而不是存储在文件系统中 这有什么价值。使用Cave可以解决哪些用例?免责声明:我没有参与OSGi规范或ApacheCave的开发。以下所有内容都是我根据个人经验得出的结论 ApacheCave是OSGi存储库规范的参考实现。后者反过来解决了OSGi捆绑包供应的问题。它应该以以下方式工作:它提供了

我目前使用karaf和artifactory作为我的osgi jar存储库。这很有效。我遇到过ApacheCave工具for Karaf,它看起来非常像一个存储库,只是它也可以存储在数据库或其他数据源中,而不是存储在文件系统中


这有什么价值。使用Cave可以解决哪些用例?免责声明:我没有参与OSGi规范或ApacheCave的开发。以下所有内容都是我根据个人经验得出的结论

ApacheCave是OSGi存储库规范的参考实现。后者反过来解决了OSGi捆绑包供应的问题。它应该以以下方式工作:它提供了一个存储库描述符,它定义了一组资源(通常是捆绑包)、它们提供的功能以及它们需要的需求。此元信息用于在部署某些资源时自动调配依赖项

详细说明见规范第132节

OSGi存储库周围的情况对我来说似乎相当阴暗。ApacheCave是OSGi存储库的提供者,但我没有找到任何适合它的客户端。我的问题仍然没有答案

有几种选择。ApacheFelix有自己的实现(org.Apache.Felix.bundlerepository),这在概念上非常相似,但与规范不完全兼容(信息可能已经过时,需要检查)。Karaf使用Features facility解决了同样的问题

这有什么价值?使用Cave可以解决哪些用例

Cave
用于存储
存储库
,其中包含有关捆绑包(或一般工件)的重要信息(如位置、版本、需求、功能等)。它是解决过程中的三个重要部分之一。另外两个是
Resolver
Resolve Context

Resolver
是您可以从OSGi运行时知道的。它会告诉您是否满足了捆绑包的要求(因此可以启动捆绑包)。为此,它与
解析上下文
对话,以了解什么是可用的,什么是预期的,什么是可选的,等等。
解析上下文
将依次咨询一个或多个
存储库
,以了解哪些捆绑包可用。通常,这些只是运行时中安装的包。但是,有一个运行时可以使用
Repository
引用外部工件,当
Resolver
确定需要这些工件时,可以安装这些工件

在构建时可以使用大致相同的概念。例如,project允许您定义
.bndrun
文件,这些文件是
解析上下文
的基于属性的版本。您可以在它们内部提供的内容之一是
存储库
,其中包含有关可用捆绑包的信息。此类存储库可以由
Cave
(或其他任何东西,包括本地XML文件)提供服务。基于这些信息,
Bnd
可以为您组装一个运行时(根据您希望运行的包告诉您需要哪些包)


此外,
Cave
可以充当Maven存储库或其他Maven存储库的代理。这很方便,因为您可以使用
Cave
作为
Resolver
和传统Maven依赖项的“单点联系人”。

AFAIK OSGI Repository spec(通常称为R5)的参考实现是(或至少是)jbosgi Repository(),尽管缺乏文档。请参阅