

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 從上游和外部連線請求 Maven 套件
<a name="maven-upstream-external-connections-request"></a>



## 匯入標準資產名稱
<a name="maven-import-standard-asset-names"></a>

從公有儲存庫匯入 Maven 套件版本時，例如 Maven Central，AWS CodeArtifact 會嘗試匯入該套件版本中的所有資產。如 中所述[使用上游儲存庫請求套件版本](repo-upstream-behavior.md)，匯入會在下列情況發生：
+ 用戶端從 CodeArtifact 儲存庫請求 Maven 資產。
+ 套件版本尚未存在於儲存庫或其上游。
+ 公有 Maven 儲存庫有可連線的外部連線。

即使用戶端可能只請求一個資產，CodeArtifact 仍會嘗試匯入該套件版本可找到的所有資產。CodeArtifact 如何探索 Maven 套件版本可用的資產取決於特定的公有儲存庫。有些公有 Maven 儲存庫支援請求資產清單，但有些則不支援。對於不提供列出資產方式的儲存庫，CodeArtifact 會產生一組可能存在的資產名稱。例如，當`junit 4.13.2`請求 Maven 套件版本的任何資產時，CodeArtifact 會嘗試匯入下列資產：
+ `junit-4.13.2.pom`
+ `junit-4.13.2.jar`
+ `junit-4.13.2-javadoc.jar`
+ `junit-4.13.2-sources.jar`

## 匯入非標準資產名稱
<a name="maven-import-nonstandard-asset-names"></a>

當 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 資產時，該資產會匯入並新增至儲存在 CodeArtifact 中的現有套件版本。最下游儲存庫 （用戶端提出請求的儲存庫） 和連接外部連線的儲存庫中的套件版本都會更新為包含新資產，如中所述[來自上游儲存庫的套件保留](repo-upstream-behavior.md#package-retention-upstream-repos)。

一般而言，一旦套件版本保留在 CodeArtifact 儲存庫中，它不會受到上游儲存庫中的變更影響。如需詳細資訊，請參閱[來自上游儲存庫的套件保留](repo-upstream-behavior.md#package-retention-upstream-repos)。不過，先前描述的非標準名稱 Maven 資產的行為是此規則的例外狀況。雖然下游套件版本不會在沒有用戶端請求額外資產的情況下變更，但在這種情況下，保留的套件版本會在最初保留之後進行修改，因此不可變。此行為是必要的，因為具有非標準名稱的 Maven 資產將無法透過 CodeArtifact 存取。在將套件版本保留在 CodeArtifact 儲存庫之後，如果將其新增至公有儲存庫上的 Maven 套件版本，則行為也會啟用 。

## 檢查資產原始伺服器
<a name="origin-checks-for-assets"></a>

將新資產新增至先前保留的 Maven 套件版本時，CodeArtifact 會確認保留套件版本的原始伺服器與新資產的原始伺服器相同。這可防止建立「混合」套件版本，其中不同的資產來自不同的公有儲存庫。如果沒有此檢查，如果 Maven 套件版本發佈到多個公有儲存庫，且這些儲存庫是 CodeArtifact 儲存庫上游圖形的一部分，則可能會發生資產混合。

## 在上游儲存庫中匯入新的資產和套件版本狀態
<a name="new-asset-importing-pv-status-upstream-repos"></a>

上游儲存庫中套件版本的[套件版本狀態](packages-overview.md#package-version-status)可防止 CodeArtifact 在下游儲存庫中保留這些版本。

例如，假設網域有三個儲存庫：`repo-A`、 `repo-B`和 `repo-C`，其中 `repo-B` 是 `repo-A`和 `repo-C`上游的 upsteam`repo-B`。

![新資產和套件版本如何在上游儲存庫中運作的圖表。](http://docs.aws.amazon.com/zh_tw/codeartifact/latest/ug/images/Maven-new-asset-pv-upstream.png)


Maven 套件`7.3.1`的套件版本`com.android.tools.build:aapt2`存在於 中，`repo-B`且狀態為 `Published`。它不存在於 中`repo-A`。如果用戶端從 請求此套件版本的資產`repo-A`，回應將是 200 (OK)，而 Maven 套件版本`7.3.1`將保留在 中`repo-A`。不過，如果 `7.3.1`中的套件版本狀態`repo-B`為 `Archived`或 `Disposed`，回應將會是 404 （找不到），因為這兩個狀態的套件版本的資產無法下載。

請注意，在 `repo-A`、 `repo-B`和 `com.android.tools.build:aapt2`中將[套件原始伺服器控制](package-origin-controls.md)設定為 `upstream=BLOCK`，將`repo-C`防止從 擷取該套件所有版本的新資產`repo-A`，無論套件版本狀態為何。