我目前使用 karaf 和 artifactory 作为我的 osgi jar 存储库。这很好用。我遇到了用于 Karaf 的 Apache Cave 工具,它看起来非常像一个存储库,除了它也可以存储在数据库或其他数据源中而不是文件系统中。
这提供了什么价值。有哪些可以使用 Cave 解决的用例
我目前使用 karaf 和 artifactory 作为我的 osgi jar 存储库。这很好用。我遇到了用于 Karaf 的 Apache Cave 工具,它看起来非常像一个存储库,除了它也可以存储在数据库或其他数据源中而不是文件系统中。
这提供了什么价值。有哪些可以使用 Cave 解决的用例
免责声明:我不参与 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 工具解决了同样的问题。
这提供了什么价值?使用 Cave 可以解决哪些用例?
Cave
用于存储Repositories
包含有关捆绑包(或一般的工件)的重要信息(例如位置、版本、要求、功能......)。它是解决过程中的三个重要部分之一。其他 2 个是Resolver
和Resolve 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