翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 で公開する。mvn
や gradle
などの Maven クライアントでスナップショットバージョンをビルドしてデプロイする場合、このセクションの記載は適用されないことに注意してください。対象のクライアントのドキュメントに従ってください。
スナップショットバージョンを公開するには、スナップショットバージョンの 1 つ以上のビルドを公開する必要があります。では CodeArtifact、スナップショットバージョンのビルドが n の場合、n + 1 CodeArtifact バージョンがあります。n ビルドバージョンはすべて ステータスでUnlisted
、1 つのスナップショットバージョン (最新の公開済みビルド) は ステータスですPublished
。スナップショットバージョン (つまり、「-SNAPSHOT」を含むバージョン文字列を持つバージョン) には、最新の公開済みビルドと同じアセットセットが含まれています。curl
を使用してこの構造を作成する最も簡単な方法は次のとおりです。
-
curl
を使用して、すべてのビルドのすべてのアセットを公開します。 -
curl
を使用して、前のビルド (最新の日付/タイムスタンプが付いたビルド) のmaven-metadata.xml
ファイルを公開します。これにより、バージョン文字列に「-SNAPSHOT
」を含み、正しいアセットセットを含むバージョンが作成されます。 -
を使用して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 \ --repositorymy-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 つのリポジトリがあり、 U
U
が の上流にあるR
としますR
。で新しいビルドを発行する場合R
、Maven クライアントがそのスナップショットバージョンの最新のビルドをリクエストすると、 は から最新バージョン CodeArtifact を返しますU
。最新バージョンが ではなく に追加されたためR
、これは予期しない可能性がありますU
。これを回避するには、次の 2 つの方法があります。
-
1.0-SNAPSHOT
に1.0-SNAPSHOT
が存在する場合はR
、 などのスナップショットバージョンのビルドを公開しないでくださいU
。 -
CodeArtifact パッケージオリジンコントロールを使用して、 でそのパッケージのアップストリームを無効にします
R
。後者では、 で の1.0-SNAPSHOT
ビルドを発行できますがR
、まだ保持U
されていない からそのパッケージの他のバージョンを取得R
することもできなくなります。