我想使用 AQL 获取特定组下的所有工件名称及其版本。您能否帮助 API 端点和 AQL。
在 GET REST API 下面,我得到了与组 com.load.runners 上的 runner 相关的版本。但我喜欢从 group com.load.runners 获取所有工件及其版本。
https://localhost/artifactory/api/search/versions?g=com.load.runners&a=runner&repos=maven
似乎没有直接的方法足够简单和高性能来使用 AQL.
BUT-
您可以做的是使用 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")
这将返回所有.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
)。请注意,您需要自行将版本聚合到项目。