Maven工件库的索引是如何工作的

Maven工件库的索引是如何工作的,maven,nexus,artifactory,maven-indexer,Maven,Nexus,Artifactory,Maven Indexer,我想了解Nexus和Artifactory等工件库的索引是如何工作的。它提供了什么好处?我的意思是——它有什么帮助,以及在解析工件时使用的逻辑是什么 我的理解是,Lucene索引包含关于给定代理存储库或组中存在哪些工件的信息,一旦下载了这些索引,您就可以轻松地检查远程存储库是否包含您正在查找的工件,并且您可以尝试从拥有该工件的存储库中解析它。这是唯一的用途吗?是否还查询索引以获得本地分辨率(因为每个存储库都有索引)。。。?这实际上是如何工作的?存储库索引是关于搜索的。Maven Eclipse插

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


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

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


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

Artifactory不使用索引进行搜索。我们相信索引已经成为过去,那时机器运行缓慢,无法在服务器端处理大型搜索。以下仅列出了搜索索引不好的部分原因:

  • 客户端需要在搜索之前下载巨大的文件
  • 索引更新太少,无法反映频繁的更改
  • 具有搜索索引的系统需要特殊的客户端对其执行搜索
  • 客户端将其与索引格式紧密结合

如今,当像Artifactory这样的服务器可以提供实时搜索,并通过UI为人类公开IDE等工具的API时,索引已经过时,Artifactory只支持与m2eclipse等工具兼容。

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

Nexus不使用索引来实现其主要功能:提供工件和/或代理工件,但它会动态维护索引。同样,索引不会以“解析”或任何其他方式使用,搜索UI和下游发布原因除外(适用于M2E等客户机)

例如Maven Indexer的“客户端”用法,您可以查看示例

HTH,

~t~

你能提供更多的信息吗?例如,代码,处理这个问题的库,更具体地说,一些类…?@carlspring我从来都不需要直接访问索引。我是通过Nexus UI和Eclipse插件的间接用户。我不认为它们很神奇。我建议阅读Apache Lucene文档tation提供了一些直接读取索引的客户端库示例。谢谢,我会看一看。我是同一类型的用户,但希望了解更多。再次感谢Marc,确认我的理解是正确的!我接受Tamas的回答,因为它包含了我正在寻找的代码示例。Maven不是唯一的存储库技术ogy使用索引。公平地说,Lucene支持部分索引更新,从而减少了索引下载的大小。使用索引的关键优势在于它支持分布式搜索。至于客户端耦合Lucene是一种开放格式,我不知道在支持它的格式方面有什么困难,尽管我可以想象是否存在格式问题只有替代Maven存储库(如artifactory)的供应商会受到影响,因为大多数用户不会直接访问索引……我会责备Sonatype没有真正记录Maven repoformat@MarkO康纳我不知道你说的“分布式搜索”是什么意思?就在几天前,我们试图找到可下载索引相对于服务器端API的一些好处,但没有找到。我很高兴听到(真的)。明白。Maven repos不是唯一一种具有可下载索引的技术。例如,yum repositories(RPM包)使用相同的方法,使用sqlite数据库存储存储库索引(由客户端下载)。我猜相对于REST API的主要优势在于可扩展性,托管repo所需的只是HTTP服务器和rsync。好吧,RPM有一个借口——这是一项古老的技术,当时计算机速度很慢,无法通过服务器端搜索进行扩展。但现在?我的智能手机可以运行ElasticSearch server!+1公平点。现在你们必须说服Sonatype:-)但是Maven客户端非常愚蠢。不使用RESTAPI,并且做很多未记录的事情(比如元数据处理客户端,非常愚蠢)。我怀疑你是个失败者……非常感谢你的代码示例和详细解释!我非常感谢你在Nexus上的工作!