【问题标题】:How does the indexing of Maven artifact repositories workMaven 工件存储库的索引是如何工作的
【发布时间】:2013-06-05 09:27:10
【问题描述】:

我想了解 Nexus 和 Artifactory 等工件存储库的索引是如何工作的。它提供什么好处?我的意思是——它有什么帮助?解决工件时使用的逻辑是什么?

我的理解是,Lucene 索引包含有关在给定代理存储库或组中存在哪些工件的信息,一旦下载了这些索引,您就可以轻松检查远程存储库是否包含您正在寻找的工件和您可以尝试从拥有它的存储库中解决它。这是唯一的用途吗?是否还查询索引以获取本地分辨率(因为每个存储库都有一个索引)......?这实际上是如何工作的?

【问题讨论】:

    标签: maven nexus artifactory maven-indexer


    【解决方案1】:

    存储库索引是关于搜索的。 Maven Eclipse 插件文档描述了该功能:

    维护服务器端索引使 Maven 客户端操作更加高效。服务器端存储库管理器可以使用索引来启用搜索接口和 REST API 来检索工件(Sonatype Nexus 不需要数据库)。

    【讨论】:

    • 您能否提供更多信息——例如代码、处理这个问题的库,更具体地说——一些类...?
    • @carlspring 我从来不需要直接访问索引。我是 Nexus UI 和 Eclipse 插件的间接用户。我不认为他们很神奇。我建议阅读 Apache Lucene 文档以获取用于直接读取索引的客户端库示例。
    • 谢谢,我去看看。我是同一类用户,但想了解更多。
    • 再次感谢 Marc,确认我的理解是正确的!我接受 Tamas 的回答,因为它包含我正在寻找的那种代码示例。
    【解决方案2】:

    Artifactory 不使用索引进行搜索。我们相信索引已经成为过去,当时机器速度很慢,无法处理服务器端的大型搜索。以下只是搜索索引不好的部分原因:

    • 客户端搜索前需要下载大文件
    • 索引更新太少,无法反映频繁更改
    • 具有搜索索引的系统需要特殊的客户端来执行搜索
    • 客户端与索引格式强耦合。

    如今,当像 Artifactory 这样的服务器可以提供实时搜索,通过 UI 向人类公开一个用于 IDE 等工具的 API 时,索引已经过时并且在 Artifactory 中仅支持与 m2eclipse 等工具兼容。

    【讨论】:

    • Maven 并不是唯一使用索引的存储库技术。公平地说,Lucene 支持部分索引更新,从而减少索引下载的大小。使用索引的主要优点是它支持分布式搜索。至于客户端耦合 Lucene 是一种开放格式,我不知道支持它的格式有困难,尽管我想如果存在格式问题,只有替代 Maven 存储库(如工件)的供应商会受到影响,因为大多数用户不会访问直接索引...我会指责 Sonatype 没有真正记录 Maven 存储库格式
    • @MarkO'Connor 我不确定您所说的“分布式搜索”是什么意思?就在几天前,我们试图找到可下载索引与用于搜索的服务器端 API 相比的一些优势,但没有发现。很高兴听到(真的)。
    • 明白。 Maven 存储库并不是唯一具有可下载索引的技术。例如 yum 存储库(RPM 包)使用相同的方法,使用 sqlite 数据库来存储存储库索引(由客户端下载)。我猜想 REST API 的主要优势是可扩展性,托管 repo 所需的只是 HTTP 服务器和 rsync。
    • 嗯,RPM 有一个借口——它是一项古老的技术,当时计算机速度很慢,无法通过服务器端搜索进行扩展。但是现在呢?我的智能手机可以运行 ElasticSearch 服务器!
    • +1 公平点。现在你们必须说服 Sonatype :-) 不过 Maven 客户端非常愚蠢。不使用 REST API 并且做了很多未记录的事情(比如元数据处理客户端,真的很愚蠢)。我怀疑你是个失败者......
    【解决方案3】:

    正如 Mark 已经说过的,Maven 索引完全是关于搜索(服务器端,搜索通过 UI 或使用 REST)或客户端,例如 M2E 所做的(典型示例是 POM 编辑器中的代码完成,其中上下文提示使用索引为您提供 Gs、As 和 Vs,同时添加依赖项。

    Nexus 不使用索引来实现它的主要功能:提供工件和/或代理它们,而它确实在运行中维护索引。同样,索引不用于“解析”或任何其他方式,除了搜索 UI 和下游发布原因(对于像 M2E 这样的客户端)。

    例如Maven Indexer的“客户端”使用,可以看例子here

    HTH,
    ~t~

    【讨论】:

    • 非常感谢代码示例和详细解释!我非常感谢您在 Nexus 上所做的工作!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 2011-01-05
    相关资源
    最近更新 更多