View a markdown version of this page

アップストリームと外部接続からの Maven パッケージのリクエスト - CodeArtifact

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

アップストリームと外部接続からの Maven パッケージのリクエスト

標準アセット名のインポート

Maven Central などのパブリックリポジトリから Maven パッケージバージョンをインポートする際、AWS CodeArtifact はそのパッケージバージョン内のすべてのアセットのインポートを試みます。「アップストリームリポジトリを持つパッケージバージョンのリクエスト」で説明したように、インポートは次の場合に行われます。

  • クライアントが CodeArtifact リポジトリから Maven アセットをリクエストする。

  • パッケージバージョンはリポジトリにもアップストリームにも存在しない。

  • パブリック Maven リポジトリにアクセス可能な外部接続がある。

クライアントが 1 つのアセットのみをリクエストする場合でも、CodeArtifact はそのパッケージバージョンで見つかったすべてのアセットをインポートしようとします。CodeArtifact が Maven パッケージバージョンで使用できるアセットをどのように検出するかは、パブリックリポジトリによって異なります。一部のパブリック Maven リポジトリは、アセットリストのリクエストをサポートし、別のリポジトリはアセットリストのリクエストをサポートしていません。アセットリストを提供しないリポジトリの場合、CodeArtifact は存在する可能性のあるアセット名のセットを生成します。例えば、Maven パッケージバージョン junit 4.13.2 のアセットがリクエストされると、CodeArtifact は次のアセットのインポートを試みます。

  • junit-4.13.2.pom

  • junit-4.13.2.jar

  • junit-4.13.2-javadoc.jar

  • junit-4.13.2-sources.jar

非標準アセット名のインポート

Maven クライアントが上記のパターンのいずれかと一致しないアセットをリクエストすると、CodeArtifact はそのアセットがパブリックリポジトリに存在するかどうかを確認します。アセットが存在する場合、そのアセットはインポートされ、既存のパッケージバージョンレコード (存在する場合) に追加されます。例えば、Maven パッケージバージョン com.android.tools.build:aapt2 7.3.1-8691043 には以下のアセットが含まれています。

  • aapt2-7.3.1-8691043.pom

  • aapt2-7.3.1-8691043-windows.jar

  • aapt2-7.3.1-8691043-osx.jar

  • aapt2-7.3.1-8691043-linux.jar

クライアントが POM ファイルをリクエストしたときに、CodeArtifact がパッケージバージョンのアセットを一覧表示できない場合、インポートされるアセットは POM のみです。これは、他のどのアセットも標準のアセット名パターンに一致しないためです。ただし、クライアントが JAR アセットの 1 つを要求すると、そのアセットはインポートされ、CodeArtifact に格納されている既存のパッケージバージョンに追加されます。「アップストリームリポジトリからのパッケージの保持」で説明されているように、最も下流のダウンストリームリポジトリ (クライアントがリクエストを行ったリポジトリ) と外部接続がアタッチされているリポジトリの両方のパッケージバージョンが、新しいアセットを含むように更新されます。

通常、パッケージバージョンが CodeArtifact リポジトリに保持されると、アップストリームリポジトリでの変更による影響を受けません。詳細については、「アップストリームリポジトリからのパッケージの保持」を参照してください。ただし、前述した非標準名の Maven アセットの動作は、この規則の例外です。クライアントによって追加のアセットがリクエストされない限り、ダウンストリームパッケージバージョンは変更されませんが、この状況では、保持されたパッケージバージョンは最初に保持された後に変更されるため、イミュータブルではありません。非標準名の Maven アセットには CodeArtifact からアクセスできないため、この動作は必要です。この動作は、パッケージバージョンが CodeArtifact リポジトリに保持された後にパブリックリポジトリの Maven パッケージバージョンに追加された場合にも有効になります。

アセットオリジンの確認

以前保持されていた Maven パッケージバージョンに新しいアセットを追加すると、CodeArtifact は保持されているパッケージバージョンのオリジンが新しいアセットの提供元と同じであることを確認します。これにより、異なるアセットが異なるパブリックリポジトリから送信される「混合」パッケージバージョンが作成されなくなります。このチェックを行わないと、Maven パッケージバージョンが複数のパブリックリポジトリに公開され、それらのリポジトリが CodeArtifact リポジトリのアップストリームグラフの一部である場合に、アセットのミキシングが発生する可能性があります。

アップストリームリポジトリへの新しいアセットのインポートとパッケージバージョンステータスのインポート

アップストリームリポジトリのパッケージバージョンのパッケージバージョンステータスにより、CodeArtifact がそれらのバージョンをダウンストリームリポジトリに保持できなくなることがあります。

たとえば、ドメインに repo-A、、 の 3 つのリポジトリがあるとします。ここでrepo-Crepo-Bは のアップストリームrepo-Arepo-Brepo-Cは のアップストリームですrepo-B

アップストリームリポジトリの新しいアセットとパッケージバージョンがどのように機能するかを示す図。

Maven パッケージ com.android.tools.build:aapt2 のパッケージバージョン 7.3.1repo-B にあり、ステータスは Published です。repo-A には存在しません。クライアントがこのパッケージバージョンのアセットを repo-A からリクエストした場合、レスポンスは 200 (OK) になり、Maven パッケージバージョン 7.3.1repo-A で保持されます。ただし、repo-B のパッケージバージョン 7.3.1 のステータスが Archived または Disposed の場合、これら 2 つのステータスのパッケージバージョンのアセットはダウンロードできないため、応答は 404 (Not Found) になります。

com.android.tools.build:aapt2パッケージオリジンコントロールrepo-Aupstream=BLOCK に設定すると、repo-Brepo-C によってパッケージバージョンのステータスにかかわらず、そのパッケージのすべてのバージョンの新しいアセットは repo-A から取得されなくなることに注意してください。