组内的 Nexus REST API 查询工件

问题描述 投票:0回答:4

我有一个 Nexus maven 存储库,我想利用 REST API 来查询我的特定组中的工件列表。我偶然发现了这个文档,但它似乎非常简洁,我找不到我需要的东西。

https://oss.sonatype.org/nexus-restlet1x-plugin/default/docs/rest.html

我想要这样的东西

http://mydomain:8081/nexus/service/local/repositories/list?groupId=com.test.superproduct&repo=snapshots

它会输出一个列表给我

  • 产品-1.0.0-快照
  • 产品-1.0.1-快照
  • 产品-1.0.2-快照 ......

更具体地说,我需要一组中工件的版本列表,但我也可以从工件名称中提取版本。

rest nexus
4个回答
19
投票

结果是,我需要的一切就是获取包含该工件可用的所有版本的

maven-metadata.xml
文件。例如,此 URL 返回此 XML:

<?xml version="1.0" encoding="UTF-8"?>
<metadata modelVersion="1.1.0">
  <groupId>com.alibaba.rocketmq</groupId>
  <artifactId>rocketmq-all</artifactId>
  <versioning>
    <latest>3.1.8-SNAPSHOT</latest>
    <release></release>
    <versions>
      <version>3.0.2-open-SNAPSHOT</version>
      <version>3.0.10-ALIYUN-SNAPSHOT</version>
      <version>3.0.11-SNAPSHOT</version>
      <version>3.1.8-SNAPSHOT</version>
    </versions>
    <lastUpdated>20140807060304</lastUpdated>
  </versioning>
</metadata>

17
投票

无需手动解析maven-metadata.xml。无需手动解析目录名或文件名。

http://localhost/nexus/service/local/lucene/search?g=com.foo&a=foo-bar

不仅返回每个

<version>
,而且作为奖励,对于此版本的每个工件,为驻留在此 Nexus 实例上的任何单个文件获取唯一的下载 URL 所需的所有标识符。下载 URL 所需的标识符为:
<groupId>
<artifactId>
(您说您已经知道这两个标识符)、
<version>
<repositoryId>
<extension>
(以及
<classifier>
,在我的示例中是可选且未定义的) ):

...
<artifact>
  <groupId>com.foo</groupId>
  <artifactId>foo-bar</artifactId>
  <version>2.8.1</version>
  <latestSnapshot>2.8.5-SNAPSHOT</latestSnapshot>
  <latestSnapshotRepositoryId>snapshots</latestSnapshotRepositoryId>
  <latestRelease>2.8.3</latestRelease>
  <latestReleaseRepositoryId>releases</latestReleaseRepositoryId>
  <artifactHits>
    <artifactHit>
      <repositoryId>releases</repositoryId>
      <artifactLinks>
        <artifactLink>
          <extension>pom</extension>
        </artifactLink>
        <artifactLink>
          <extension>war</extension>
        </artifactLink>
      </artifactLinks>
    </artifactHit>
  </artifactHits>
</artifact>
<artifact>
  <groupId>com.foo</groupId>
  <artifactId>foo-bar</artifactId>
  <version>2.8.0</version>
  <latestSnapshot>2.8.5-SNAPSHOT</latestSnapshot>
  <latestSnapshotRepositoryId>snapshots</latestSnapshotRepositoryId>
  <latestRelease>2.8.3</latestRelease>
  <latestReleaseRepositoryId>releases</latestReleaseRepositoryId>
  <artifactHits>
    <artifactHit>
      <repositoryId>releases</repositoryId>
      <artifactLinks>
        <artifactLink>
          <extension>pom</extension>
        </artifactLink>
        <artifactLink>
          <extension>war</extension>
        </artifactLink>
      </artifactLinks>
    </artifactHit>
  </artifactHits>
</artifact>

解析

lucene/search
响应后,一个好主意是通过存储库 ID 来过滤它,即
releases
snapshots

此答案适用于 Nexus 2.11。


5
投票

通常您会希望使用为存储库维护的 lucene 索引进行这样的查找。请参阅索引器插件的 REST 文档,您可以在此处搜索 groupId 和artifactId。


0
投票

我知道自 OP 以来已经过去了 5 年,但这里是用于 Nexus 3 的 url,以防有人需要它:

http://nexus.domain/service/rest/v1/search/assets/download?repository=maven-snapshots&maven.groupId=com.example.pack&maven.artifactId=apo&maven.baseVersion=1.0.0-SNAPSHOT&maven.extension=jar

© www.soinside.com 2019 - 2024. All rights reserved.