Maven スナップショットを使用する - CodeArtifact

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Maven スナップショットを使用する

Maven スナップショット は、最新のプロダクションブランチコードを参照する Maven パッケージの特別なバージョンです。これは最終リリース版に先行する開発版です。Maven パッケージのスナップショットバージョンは、パッケージバージョンに追加されているサフィックス SNAPSHOT で識別できます。例えば、バージョン 1.1 のスナップショットは 1.1-SNAPSHOT です。詳細については、Apache Maven Project ウェブサイトのSNAPSHOT「バージョンとは」を参照してください。

AWS CodeArtifact は、Maven スナップショットの発行と消費をサポートしています。時間ベースのバージョン番号を使用する一意のスナップショットは、サポートされている唯一のスナップショットです。Maven CodeArtifact 2 クライアントによって生成される一意でないスナップショットはサポートされていません。サポートされている Maven スナップショットは、任意の CodeArtifact リポジトリに発行できます。

でのスナップショット発行 CodeArtifact

AWS CodeArtifact は、 などのクライアントがスナップショットを発行するときにmvn使用するリクエストパターンをサポートします。そのため、Maven スナップショットの公開方法を詳しく理解していなくても、ビルドツールやパッケージマネージャーのドキュメントに従って操作することができます。より複雑な作業を行う場合は、このセクションでスナップショット CodeArtifact の処理方法について詳しく説明します。

Maven スナップショットが CodeArtifact リポジトリに発行されると、以前のバージョンはビルドと呼ばれる新しいバージョンに保持されます。Maven スナップショットが公開されるたびに、新しいビルドバージョンが作成されます。スナップショットの以前のバージョンはすべて、ビルドバージョンで保持されます。Maven スナップショットが公開されると、そのパッケージバージョンのステータスは Published に設定され、前のバージョンを含むビルドのステータスは Unlisted に設定されます。この動作は、パッケージバージョンに -SNAPSHOT サフィックスが付いている Maven パッケージバージョンのみに適用されます。

例えば、 という名前の Maven パッケージのスナップショットバージョンcom.mycompany.myapp:pkg-1は、 という名前の CodeArtifact リポジトリにアップロードされますmy-maven-repo。スナップショットバージョンは 1.0-SNAPSHOT です。この時点では、com.mycompany.myapp:pkg-1 のバージョンは公開されていません。まず、初期ビルドのアセットが以下のパスで公開されます。

PUT maven/my-maven-repo/com/mycompany/myapp/pkg-1/1.0-SNAPSHOT/pkg-1-1.0-20210728.194552-1.jar PUT maven/my-maven-repo/com/mycompany/myapp/pkg-1/1.0-SNAPSHOT/pkg-1-1.0-20210728.194552-1.pom

タイムスタンプ 20210728.194552-1 は、スナップショットビルドを公開するクライアントによって生成されることに注意してください。

.pom ファイルと.jar ファイルがアップロードされると、リポジトリに存在する唯一の com.mycompany.myapp:pkg-1 のバージョンは 1.0-20210728.194552-1 です。これは、前のパスで指定されたバージョンが 1.0-SNAPSHOT である場合でも同様です。この時点でのパッケージバージョンステータスは Unfinished です。

aws codeartifact list-package-versions --domain my-domain --repository \ my-maven-repo --package pkg-1 --namespace com.mycompany.myapp --format maven { "versions": [ { "version": "1.0-20210728.194552-1", "revision": "GipMW+599JmwTcTLaXo9YvDsVQ2bcrrk/02rWJhoKUU=", "status": "Unfinished" } ], "defaultDisplayVersion": null, "format": "maven", "package": "pkg-1", "namespace": "com.mycompany.myapp" }

次に、クライアントはパッケージバージョンの maven-metadata.xml ファイルをアップロードします。

PUT my-maven-repo/com/mycompany/myapp/pkg-1/1.0-SNAPSHOT/maven-metadata.xml

maven-metadata.xml ファイルが正常にアップロードされると、 は1.0-SNAPSHOTパッケージバージョン CodeArtifact を作成し、1.0-20210728.194552-1バージョンを に設定しますUnlisted

aws codeartifact list-package-versions --domain my-domain --repository \ my-maven-repo --package pkg-1 --namespace com.mycompany.myapp --format maven { "versions": [ { "version": "1.0-20210728.194552-1", "revision": "GipMW+599JmwTcTLaXo9YvDsVQ2bcrrk/02rWJhoKUU=", "status": "Unlisted" }, { "version": "1.0-SNAPSHOT", "revision": "tWu8n3IX5HR82vzVZQAxlwcvvA4U/+S80edWNAkil24=", "status": "Published" } ], "defaultDisplayVersion": "1.0-SNAPSHOT", "format": "maven", "package": "pkg-1", "namespace": "com.mycompany.myapp" }

この時点で、スナップショットバージョン 1.0-SNAPSHOT はビルドで使用できます。リポジトリ my-maven-repo には com.mycompany.myapp:pkg-1 の 2 つのバージョンが存在しますが、どちらも同じアセットを含んでいます。

aws codeartifact list-package-version-assets --domain my-domain --repository \ my-maven-repo --format maven --namespace com.mycompany.myapp \ --package pkg-1 --package-version 1.0-SNAPSHOT--query 'assets[*].name' [ "pkg-1-1.0-20210728.194552-1.jar", "pkg-1-1.0-20210728.194552-1.pom" ]

--package-version パラメータを 1.0-20210728.194552-1 に変更して上記と同じ list-package-version-assets コマンドを実行すると、同じ出力が得られます。

1.0-SNAPSHOT のビルドがリポジトリに追加されると、新しいビルドごとに新しい Unlisted パッケージバージョンが作成されます。バージョン 1.0-SNAPSHOT のアセットは毎回更新されるため、バージョンは常にそのバージョンの最新ビルドになります。1.0-SNAPSHOT を最新のアセットで更新するには、新しいビルドの maven-metadata.xml ファイルをアップロードします。

スナップショットバージョンを使用する

スナップショットをリクエストすると、ステータス Published を持つバージョンが返されます。これは常に Maven スナップショットの最新バージョンです。URL パス内のスナップショットバージョン ( など1.0-20210728.194552-1) の代わりに、ビルドバージョン番号 ( など1.0-SNAPSHOT) を使用してスナップショットの特定の構築をリクエストすることもできます。Maven スナップショットのビルドバージョンを確認するには、 CodeArtifact API ガイドListPackageVersions APIの を使用し、ステータスパラメータを に設定しますUnlisted

スナップショットバージョンを削除する

Maven スナップショットのすべてのビルドバージョンを削除するには、 DeletePackageVersions を使用しAPI、削除するバージョンを指定します。

curl を使用してスナップショットを公開する

Amazon Simple Storage Service (Amazon S3) または別のアーティファクトリポジトリ製品に既存のスナップショットバージョンが保存されている場合は、 に再発行できます AWS CodeArtifact。が CodeArtifact Maven スナップショット (「」を参照でのスナップショット発行 CodeArtifact) をサポートするため、 などの汎用HTTPクライアントを使用してスナップショットを発行することは、 で説明されている Maven リリースバージョンを発行するよりも複雑curlですcurl で公開するmvngradle などの Maven クライアントでスナップショットバージョンをビルドしてデプロイする場合、このセクションの記載は適用されないことに注意してください。対象のクライアントのドキュメントに従ってください。

スナップショットバージョンを公開するには、スナップショットバージョンの 1 つ以上のビルドを公開する必要があります。では CodeArtifact、スナップショットバージョンのビルドが n の場合、n + 1 CodeArtifact バージョンがあります。n ビルドバージョンはすべて ステータスでUnlisted、1 つのスナップショットバージョン (最新の公開済みビルド) は ステータスですPublished。スナップショットバージョン (つまり、「-SNAPSHOT」を含むバージョン文字列を持つバージョン) には、最新の公開済みビルドと同じアセットセットが含まれています。curl を使用してこの構造を作成する最も簡単な方法は次のとおりです。

  1. curl を使用して、すべてのビルドのすべてのアセットを公開します。

  2. curl を使用して、前のビルド (最新の日付/タイムスタンプが付いたビルド) の maven-metadata.xml ファイルを公開します。これにより、バージョン文字列に「-SNAPSHOT」を含み、正しいアセットセットを含むバージョンが作成されます。

  3. を使用してUpdatePackageVersionsStatusAPI、最新のビルドバージョン以外のすべてのビルドバージョンのステータスを に設定しますUnlisted

以下の curl コマンドを使用して、com.mycompany.app:pkg-1 パッケージのスナップショットバージョン 1.0-SNAPSHOT 用のスナップショットアセット (.jar ファイルや.pom ファイルなど) を公開します。

curl --user "aws:$CODEARTIFACT_AUTH_TOKEN" -H "Content-Type: application/octet-stream" \ -X PUT https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/maven/my_maven_repo/com/mycompany/app/pkg-1/1.0-SNAPSHOT/pkg-1-1.0-20210729.171330-2.jar \ --data-binary @pkg-1-1.0-20210728.194552-1.jar
curl --user "aws:$CODEARTIFACT_AUTH_TOKEN" -H "Content-Type: application/octet-stream" \ -X PUT https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/maven/my_maven_repo/com/mycompany/app/pkg-1/1.0-SNAPSHOT/pkg-1-1.0-20210729.171330-2.pom \ --data-binary @pkg-1-1.0-20210728.194552-1.pom

これらの例を使用する場合:

  • 置換 my_domain CodeArtifact ドメイン名を使用します。

  • 置換 111122223333 CodeArtifact ドメインの所有者の AWS アカウント ID。

  • 置換 us-west-2 CodeArtifact ドメインがある AWS リージョン を使用します。

  • 置換 my_maven_repo CodeArtifact リポジトリ名を使用します。

重要

--data-binary パラメータの値には @ 文字をプレフィックスとして付ける必要があります。値を引用符で囲む場合は、@ を引用符で囲む必要があります。

ビルドごとにアップロードするアセットが 3 つ以上ある場合があります。例えば、メイン と に加えて Javadoc JARとソースJARファイルがある場合がありますpom.xml。はアップロードされたアセットごとにチェックサムを自動的に生成するため、 CodeArtifactパッケージバージョンアセットのチェックサムファイルを公開する必要はありません。アセットが正しくアップロードされたことを確認するには、list-package-version-assets コマンドを使用して生成されたチェックサムを取得し、元のチェックサムと比較します。が Maven チェックサム CodeArtifact を処理する方法の詳細については、「」を参照してください Maven チェックサムの使用

次の curl コマンドを使用して、最新のビルドバージョンの maven-metadata.xml ファイルを公開します。

curl --user "aws:$CODEARTIFACT_AUTH_TOKEN" -H "Content-Type: application/octet-stream" \ -X PUT https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/maven/my_maven_repo/com/mycompany/app/pkg-1/1.0-SNAPSHOT/maven-metadata.xml \ --data-binary @maven-metadata.xml

maven-metadata.xml ファイルは、<snapshotVersions> エレメントの最新ビルドバージョンのアセットを少なくとも 1 つ参照している必要があります。また <timestamp> 値があり、アセットファイル名のタイムスタンプと一致している必要があります。例えば、以前に公開された 20210729.171330-2 ビルドの場合、maven-metadata.xml の内容は次のようになります。

<?xml version="1.0" encoding="UTF-8"?> <metadata> <groupId>com.mycompany.app</groupId> <artifactId>pkg-1</artifactId> <version>1.0-SNAPSHOT</version> <versioning> <snapshot> <timestamp>20210729.171330</timestamp> <buildNumber>2</buildNumber> </snapshot> <lastUpdated>20210729171330</lastUpdated> <snapshotVersions> <snapshotVersion> <extension>jar</extension> <value>1.0-20210729.171330-2</value> <updated>20210729171330</updated> </snapshotVersion> <snapshotVersion> <extension>pom</extension> <value>1.0-20210729.171330-2</value> <updated>20210729171330</updated> </snapshotVersion> </snapshotVersions> </versioning> </metadata>

maven-metadata.xml を公開した後の最後のステップは、他のすべてのビルドバージョン (最新のビルド以外のすべてのビルドバージョン) のパッケージバージョンステータスを Unlisted に設定することです。例えば、1.0-SNAPSHOT バージョンに 2 つのビルドがあり、最初のビルドが 20210728.194552-1 の場合、そのビルドを設定するコマンドは Unlisted になります。

aws codeartifact update-package-versions-status --domain my-domain --domain-owner 111122223333 \ --repository my-maven-repo --format maven --namespace com.mycompany.app --package pkg-1 \ --versions 1.0-20210728.194552-1 --target-status Unlisted

スナップショットと外部接続

Maven スナップショットは、外部接続を介して Maven パブリックリポジトリから取得することはできません。 は Maven リリースバージョンのインポート AWS CodeArtifact のみをサポートします。

スナップショットとアップストリームリポジトリ

一般的に、Maven スナップショットは、アップストリームリポジトリで使用する場合、Maven リリースバージョンと同じ方法で動作しますが、アップストリーム関係を持つ 2 つのリポジトリに同じパッケージバージョンのスナップショットを発行する予定の場合は制限があります。例えば、 AWS CodeArtifact ドメインに 2 つのリポジトリがあり、 UUが の上流にあるRとしますR。で新しいビルドを発行する場合R、Maven クライアントがそのスナップショットバージョンの最新のビルドをリクエストすると、 は から最新バージョン CodeArtifact を返しますU。最新バージョンが ではなく に追加されたためR、これは予期しない可能性がありますU。これを回避するには、次の 2 つの方法があります。

  1. 1.0-SNAPSHOT1.0-SNAPSHOTが存在する場合はR、 などのスナップショットバージョンのビルドを公開しないでくださいU

  2. CodeArtifact パッケージオリジンコントロールを使用して、 でそのパッケージのアップストリームを無効にしますR。後者では、 で の1.0-SNAPSHOTビルドを発行できますがR、まだ保持Uされていない からそのパッケージの他のバージョンを取得Rすることもできなくなります。