1

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

这提供了什么价值。有哪些可以使用 Cave 解决的用例

4

2 回答 2

1

免责声明:我不参与 OSGi 规范或 Apache Cave 的开发。以下所有内容仅是我根据个人经验得出的结论。

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

详细信息在规范https://osgi.org/download/r6/osgi.cmpn-6.0.0.pdf第 132 节中进行了解释。

OSGi 存储库周围的情况对我来说似乎很阴暗。Apache Cave 是 OSGi 存储库的提供者,但我没有找到任何合适的客户端。我的问题,Karaf Cave vs org.apache.felix.bundlerepository仍然没有答案。

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

于 2017-04-01T19:50:16.107 回答
0

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

Cave用于存储Repositories包含有关捆绑包(或一般的工件)的重要信息(例如位置、版本、要求、功能......)。它是解决过程中的三个重要部分之一。其他 2 个是ResolverResolve Context

Resolver就是你可能从 OSGi 运行时知道的。它会告诉您是否满足捆绑包的要求(因此可以启动它)。为此,它与 a 交谈以Resolve Context了解可用的、预期的、可选的等。Resolve Context反过来,它会咨询一个或多个Repositories以了解可用的捆绑包。很多时候,这些只是安装在您的运行时中的捆绑包。但是,可以有一个运行时Repository引用可以在Resolver确定需要时安装的外部工件。

在构建时可以使用大致相同的概念。例如, Bnd项目允许您定义.bndrun基于属性的Resolve Context. 您可以在其中提供的其中一件事是Repositories包含有关可用捆绑包的信息。这样的存储库可以由Cave (或其他任何东西,包括本地 XML 文件)提供服务。基于该信息可以为您组装一个运行时(根据您想要Bnd运行的包告诉您需要哪些包)。

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

于 2017-04-04T16:52:59.303 回答