本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
從上流和外部連接請求 Maven 軟件包
匯入標準資產名稱
從公用儲存庫 (例如 Maven Central) 匯入 Maven 套件版本時,AWS 會 CodeArtifact 嘗試匯入該套件版本中的所有資產。如中所述請求具有上游存儲庫的軟件包版本,匯入發生在以下情況:
-
客戶端請求從 CodeArtifact 存儲庫中的 Maven 資產。
-
套件版本尚未存在於儲存庫或其上行串流中。
-
有一個可訪問的外部連接到公共 Maven 存儲庫。
即使客戶端可能只請求了一個資產,但會 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 資產時,該資產將會匯入並新增至儲存在中的現有套件版本 CodeArtifact。最下游存放庫 (用戶端發出請求的存放庫) 和附加了外部連線的存放庫中的套件版本將會更新,以包含新資產,如中從上游儲存庫保留 Package所述。
一般而言,一旦套件版本保留在儲 CodeArtifact 存庫中,它就不會受到上游儲存庫中的變更影響。如需詳細資訊,請參閱 從上游儲存庫保留 Package。但是,具有前面描述的非標準名稱的 Maven 資產的行為是此規則的例外。儘管如果沒有客戶端請求其他資產,下游軟件包版本將不會更改,但在此情況下,保留的軟件包版本在最初保留後會被修改,因此不是不可變的。這種行為是必要的,因為具有非標準名稱的 Maven 資產將無法通過訪問 CodeArtifact。如果它們被添加到公共存儲庫的 Maven 包版本後,該行為也會啟用軟件包版本保留在 CodeArtifact 存儲庫中。
檢查資產來源
將新資產添加到以前保留的 Maven 包版本時, CodeArtifact 確認保留的包版本的來源與新資產的來源相同。這樣可以防止創建「混合」包版本,其中不同的資產來自不同的公共存儲庫。如果沒有此檢查,如果 Maven 軟件包版本發佈到多個公共存儲庫,並且這些存儲庫是存儲庫上游圖的一部分,則可能會發生資產混合。 CodeArtifact
在上游存儲庫中導入新資產和軟件包版本狀態
上游儲存庫中套件版本的套件版本狀態可防 CodeArtifact 止在下游存放庫中保留這些版本。
例如,假設一個域有三個存儲庫:repo-A
repo-B
repo-C
,repo-A
和,其repo-B
中repo-C
repo-B
是.
Maven Package 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(未找到),因為這兩種狀態中的軟件包版本的資產無法下載。
請注意,將套件來源控制項設定upstream=BLOCK
為 com.android.tools.build:aapt2
in repo-A
repo-B
、和repo-C
將防止從該套件的所有版本擷取新資產repo-A
,而不論套件版本狀態為何。