翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Maven スナップショットを使用する
Maven スナップショット は、最新のプロダクションブランチコードを参照する Maven パッケージの特別なバージョンです。これは最終リリース版に先行する開発版です。Maven パッケージのスナップショットバージョンは、パッケージバージョンに追加されているサフィックス SNAPSHOT
で識別できます。例えば、バージョン 1.1
のスナップショットは 1.1-SNAPSHOT
です。詳細については、Apache Maven プロジェクトウェブサイト上の スナップショットバージョンとは何ですか?
AWS CodeArtifact は、Maven スナップショットの公開と使用をサポートしています。時間ベースのバージョン番号を使用する一意のスナップショットは、サポートされている唯一のスナップショットです。Maven 2 CodeArtifact クライアントによって生成される一意でないスナップショットはサポートされていません。サポートされている 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-SNAPSHOT
など) の代わりにビルドバージョン番号 (1.0-20210728.194552-1
など) を使用して、スナップショットの特定のビルドをリクエストすることもできます。Maven スナップショットのビルドバージョンを確認するには、ListPackageVersions 「 API CodeArtifact ガイド」の「 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
」を含み、正しいアセットセットを含むバージョンが作成されます。 -
UpdatePackageVersionsStatus API を使用して、最新でないすべてのビルドバージョンのステータスを に設定します
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 つ以上ある場合があります。例えば、メインの JAR と pom.xml
に加えて Javadoc ファイルとソース JAR ファイルがある場合があります。はアップロードされたアセットごとにチェックサムを自動的に生成するため 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 リリースバージョンと同じように機能します。例えば、 AWS CodeArtifact ドメインに と の 2 つのリポジトリがあるとR
します。ここでU
、 U
は のアップストリームですR
。このような状況では、特定のパッケージ (com.mycompany.app:pkg-1
の 1.0-SNAPSHOT
など) のスナップショットビルドを R
と U
の両方に自由に公開できます。ただし、R
(ダウンストリームリポジトリ) からスナップショットビルドを使用する際は、理解しておくべき重要ないくつかの動作があります。
-
1.0-SNAPSHOT
がR
にある場合、R
からパッケージを取得するように設定されたパッケージマネージャーで取得できるのは1.0-SNAPSHOT
のR
アセットのみです。R
を介して1.0-SNAPSHOT
のU
アセットを取得することはできません。これは、U
のスナップショットバージョンがR
のバージョンによって不可視となるためです。この動作は Maven リリースバージョンや他のパッケージフォーマットの動作と同様です。この図では、/maven/R/com/mycompany/myapp/pkg-1/1.0-SNAPSHOT/pkg-1-1.0-20221231.002230-3.jar
のGET
は 200 (OK) HTTP レスポンスコードを返しますが、/maven/R/com/mycompany/myapp/pkg-1/1.0-SNAPSHOT/pkg-1-1.0-20221220.150959-1.jar
のGET
は 404 (Not Found) HTTP レスポンスコードを返します。 -
1.0-SNAPSHOT
がU
にありR
にない場合、R
から1.0-SNAPSHOT
のアセットをプルできます。これにより、リリースバージョンと同様に1.0-SNAPSHOT
はR
で保持されます。 -
1.0-SNAPSHOT
がR
で保持された後、ユーザーはU
の追加のビルドを1.0-SNAPSHOT
に公開できます。ただし、ポイント (1) で説明した動作により、これらはR
からアクセスすることはできません。つまり、スナップショットバージョンを使用する標準的な理由 (特定のスナップショットバージョンを通じて依存関係の最新ビルドを利用する理由) は、アップストリームの関係では期待どおりには機能しません。1.0-SNAPSHOT
の新しいビルドがU
に公開されても、コンシューマーはR
にある1.0-SNAPSHOT
の最新ビルドにはアクセスできません。この問題を回避するには、R
にあるバージョン1.0-SNAPSHOT
を定期的に削除するか、U
から1.0-SNAPSHOT
のバージョンを取得するようにクライアントを設定してください。 -
Unlisted
スナップショットのビルドバージョンは、ダウンストリームリポジトリからアクセスできます。この図では、/maven/R/com/mycompany/myapp/pkg-1/1.0-20221220.150959-1/pkg-1-1.0-20221220.150959-1.jar
のGET
は 200 (OK) レスポンスコードを返します。これはアップストリームリポジトリにあるアセットを要求しますが、バージョンはビルドバージョン文字列 (1.0-20221220.150959-1
) を使用して指定されるため、アセットはダウンストリームリポジトリから取得できます。また、GET
によりバージョン1.0-20221220.150959-1
はR
で保持され、パッケージバージョンのステータスはUnlisted
になります。