【发布时间】:2017-08-26 05:50:18
【问题描述】:
我目前使用 karaf 和 artifactory 作为我的 osgi jar 存储库。这很好用。我遇到了用于 Karaf 的 Apache Cave 工具,它看起来非常像一个存储库,除了它也可以存储在数据库或其他数据源中而不是文件系统中。
这提供了什么价值。使用 Cave 可以解决哪些用例
【问题讨论】:
标签: osgi apache-karaf karaf obr
我目前使用 karaf 和 artifactory 作为我的 osgi jar 存储库。这很好用。我遇到了用于 Karaf 的 Apache Cave 工具,它看起来非常像一个存储库,除了它也可以存储在数据库或其他数据源中而不是文件系统中。
这提供了什么价值。使用 Cave 可以解决哪些用例
【问题讨论】:
标签: osgi apache-karaf karaf obr
免责声明:我不参与 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,其中包含有关捆绑包(或一般工件)的重要信息(例如位置、版本、要求、功能...)。它是解决过程中的三个重要部分之一。另外两个是Resolver 和Resolve Context。
Resolver 是您可能从 OSGi 运行时知道的。它会告诉您是否满足捆绑包的要求(因此可以启动它)。为此,它与Resolve Context 交谈以了解可用的、预期的、可选的等。Resolve Context 将依次咨询一个或多个Repositories 以了解可用的捆绑包.很多时候,这些只是安装在您的运行时中的捆绑包。但是,可以有一个运行时使用 Repository 来引用可以在 Resolver 确定需要时安装的外部工件。
在构建时可以使用大致相同的概念。例如Bnd 项目允许您定义.bndrun 文件,这些文件是Resolve Context 的基于属性的版本。您可以在其中提供的其中一项内容是Repositories,其中包含有关可用捆绑包的信息。此类存储库可以由Cave(或其他任何东西,包括本地 XML 文件) 提供服务。基于该信息Bnd 可以为您组装一个运行时(根据您想要运行的包告诉您需要哪些包)。
此外,Cave 可以充当 Maven 存储库或代理到其他 Maven 存储库。这很方便,因为您可以使用 Cave 作为 Resolver 和传统 Maven 依赖项的“单一联系点”。
【讨论】: