web-dev-qa-db-ja.com

NexusレストAPIを使用して、特定のgroupid / artifactIdの最新のアーティファクトバージョンを取得する

ネクサスREST apiを使用してMavenアーティファクトの最新バージョンを取得しようとしています。http://repo.local/service/local/data_index?a=local-turbogears-server&from=0&g=com.turbo&c=bin&v=1.1.9を使用して探している特定のバージョンを参照できます。バージョンパラメータを削除すると、すべてのバージョンが表示されますが、バージョンとしてRELEASEまたはLATESTを使用すると、ゼロの結果が返されます。nexusのディスク上のmaven-metadata.xmlを確認し、最新およびリリースのエントリがあります。最新バージョンを返すために必要な別のステップはありますか?

私は現在使用しています:

Nexus v。1.9.2

39
chrisst

次のURLは、log4j 1.2.xの最新バージョンを取得します。

http://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=log4j&a=log4j&v=LATEST

文書化 ここ

更新

Curlを使用した例:

curl -L "http://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=log4j&a=log4j&v=LATEST" -o log4j.jar

Log4j2の更新

Log4j 1.2は2015年夏以降EOLであり、Java 9。

Log4jアーティファクトのリンクは次のとおりです。

64
Mark O'Connor

Nexusでは、LATESTは通常のアーティファクトではなくmavenプラグインで動作するように設計されています。ネクサスは、他の場合に最新の動作を保証するものではありません。現時点で正しいバージョンのアーティファクトが返された場合、明日は機能しなくなる可能性がありますNexusリポジトリのメタデータの再構築を実行する場合。いつでも壊れる可能性のあるメカニズムに依存しますか(例:リリースプロセス中)。私は疑う。詳細については この記事 をお読みください。

最新のアーティファクトバージョンを見つけるには、独自のスクリプトを記述してSearch APIを呼び出し、必要に応じてアーティファクトバージョンをソートする必要があります。または、Nexus用の独自のプラグインを作成できます。

または、ワークフローで許可されている場合は、リリースバージョンの代わりにSNAPSHOTを使用できます。数値部分をインクリメントしない場合、x.y.z-SNAPSHOTは常に最新のバイナリを返します。

最後のポイント:アーティファクトの最新バージョンを使用しないでください。そのようなユースケースがある場合、ほとんどの場合、デプロイメント(または実行していること)に何か問題があります。一般に、使用する正確なバージョンを知っている必要があります。

23

この回答は以下からコピーされました: https://stackoverflow.com/a/39485361/1450799

Linux OSを使用していて、REST APIにアクセスできないため、次のコマンドを使用して、Nexusからスナップショットの最新バージョンを取得しました。

WSO2リポジトリからのスナップショットmaven-metadata.xmlの例:

$ curl -s "http://maven.wso2.org/nexus/content/repositories/snapshots/org/wso2/is/wso2is/maven-metadata.xml"
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
  <groupId>org.wso2.is</groupId>
  <artifactId>wso2is</artifactId>
  <versioning>
    <latest>5.3.0-SNAPSHOT</latest>
    <release></release>
    <versions>
      <version>5.1.0-SNAPSHOT</version>
      <version>5.2.0-SNAPSHOT</version>
      <version>5.3.0-SNAPSHOT</version>
    </versions>
    <lastUpdated>20160914062755</lastUpdated>
  </versioning>
</metadata>

Maven-metadata.xml内の最新のXMLタグから抽出:

curl -s "http://maven.wso2.org/nexus/content/repositories/snapshots/org/wso2/is/wso2is/maven-metadata.xml" | \
grep "<latest>.*</latest>" | \
sed -e "s#\(.*\)\(<latest>\)\(.*\)\(</latest>\)\(.*\)#\3#g"

Maven-metadata.xml内のバージョンXMLタグから抽出:

curl -s "http://maven.wso2.org/nexus/content/repositories/snapshots/org/wso2/is/wso2is/maven-metadata.xml" | \
grep "<version>.*</version>" | \
sort --version-sort | uniq | tail -n1 | \
sed -e "s#\(.*\)\(<version>\)\(.*\)\(</version>\)\(.*\)#\3#g"

2016年9月14日までの両方のコマンドの結果は次のとおりです。

5.3.0-SNAPSHOT
15
Reza Rahimi

RESTサービスをLATESTバージョンで試してみて、常に機能するとは限りません( @ Stanislav response を参照) metadata.xmlファイルを解析するための1行のLinuxコマンド:

wget -O - -o /dev/null https://repo1.maven.org/maven2/org/brutusin/wava/maven-metadata.xml | grep -Po '(?<=<version>)([0-9\.]+(-SNAPSHOT)?)' | sort --version-sort -r | head -n 1

適切なURLに変更するだけで、うまくいくはずです。

乾杯

3
idelvall