web-dev-qa-db-ja.com

Nexus RESTグループ内のAPIクエリアーティファクト

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

そしてそれは私にリストを出力するでしょう

  • product-1.0.0-スナップショット
  • product-1.0.1-SNAPSHOT
  • product-1.0.2-SNAPSHOT...。

具体的には、グループ内にあるアーティファクトのバージョンのリストが必要ですが、アーティファクト名からバージョンを抽出することもできます。

9
Sergei Ledvanov

必要なのは、このアーティファクトで使用可能なすべてのバージョンを含むˇ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>
16
Sergei Ledvanov

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のいずれかでフィルタリングすることをお勧めします。

この答えはNexus2.11用です。

15
kubanczyk

通常、このようなルックアップには、リポジトリ用に維持されているluceneインデックスを使用する必要があります。 RESTインデクサープラグインのドキュメント を参照してください。ここでgroupIdとartifactIdを検索できます。

5
nabcos