组内的Nexus REST API查询工件

时间:2014-07-25 13:47:40

标签: rest nexus

我有一个Nexus maven repo,我想利用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-SNAPSHOT
  • 产物-1.0.1-SNAPSHOT
  • 产物-1.0.2-SNAPSHOT .....

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

4 个答案:

答案 0 :(得分:15)

我得到的一切就是获取maven-metadata.xml`文件,该文件包含此工件可用的所有版本。例如,

https://oss.sonatype.org/service/local/repositories/snapshots/content/com/alibaba/rocketmq/rocketmq-all/maven-metadata.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>

答案 1 :(得分:12)

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

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

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

<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> 回复之后,一个好主意是通过repositoryId过滤它lucene/searchreleases

这个答案适用于Nexus 2.11。

答案 2 :(得分:5)

通常,您希望使用为存储库维护的lucene索引来进行此类查找。请参阅the REST documentation for the indexer plugin,您可以在此处搜索groupId和artifactId。

答案 3 :(得分:0)

我知道自OP以来已经过去了5年,但是如果有人需要,这里是nexus 3的网址: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