Artifactory 查询语言 - 获取工件名称和版本 - 基于组的搜索

Artifactory Query Language - Fetch Artifact Name and Version - Search based on Group

我想使用 AQL 获取特定组下的所有工件名称及其版本。您能否帮助 API 端点和 AQL。

下面的 GET REST API 为我提供了与组 com.load.runners 上的跑步者相关的版本。 但我喜欢从组 com.load.runners.

中获取所有工件及其版本

https:///localhost/artifactory/api/search/versions?g=com.load.runners&a=runner&repos=maven

似乎没有简单且高效的直接方法可以使用 AQL 来做到这一点。
但是-
你可以做的是使用关于 Maven 布局的先验知识(Maven 工件如何存储在存储库中),使用 AQL 查询相关项目(文件),然后提取你需要的信息。

依赖 Maven 布局中的 *.pom 个文件(因为每个工件版本都有一个)(其中 ./ 替换):

<groupId>/<artifactId>/<version>/<artifactId>-<version>.pom

例如,工件 com.load.runners:runners:1.0.0.pom 文件的路径将是:

com/load/runners/runner/1.0.0/runner-1.0.0.pom

有了这些知识,您可以运行进行以下查询:

POST /artifactory/api/search/aql
Content-Type: text/plain

items.find({
  "repo": "maven",
  "path": {
    "$match": "com/load/runners/*"
  },
  "name": {
    "$match": "*.pom"
  }
}).include("path")

这将 return 所有 .pom 文件的路径,不带文件名。例如:

{
  "results": [
    {
      "path": "com/load/runners/runner/1.0.0"
    },
    {
      "path": "com/load/runners/runner/2.0.0"
    },
    {
      "path": "com/load/runners/other-runner/1.0.0"
    },
    ...
  ]
}

所以现在,您所要做的就是从这些路径中提取信息 - 由 / 分割,最后一部分是 version(例如 1.0.0),前一个是artifactId(例如runner),其余的是groupId,其中所有/需要替换为.(例如com.load.runners).请注意,您需要自行将版本聚合到工件。