使用 Maven aven aven aven aven aven aven aven - CodeArtifact

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

使用 Maven aven aven aven aven aven aven aven

當 Maven 工件發布到AWS CodeArtifact 存儲庫時,與包中的每個資產或文件關聯的校驗和用於驗證上傳。資產的例子是子,POM戰爭文件。對於每個資產,Maven 工件包含多個校驗和文件,這些文件使用資產名稱和附加擴展名,例如md5sha1。例如,名為的檔案的總和檢查碼檔案my-maven-package.jar可能是my-maven-package.jar.md5my-maven-package.jar.sha1

注意

Maven 使用的術語artifact。在本指南中,Maven 軟件包與 Maven 工件相同。如需詳細資訊,請參閱AWS CodeArtifact封裝置。

總和檢查碼儲存

CodeArtifact 不會將 Maven 校驗和存儲為資產。這表示總和檢查碼不會顯示為 ListPackageVersionAssets API 輸出中的個別資產。相反地,所有受支援的總和檢查碼類型中的每個資產 CodeArtifact都可以使用計算的總和檢查碼。例如,調 ListPackageVersionAssets 用 Maven 包版本的響應的一部分commons-lang:commons-lang 2.1是:

{ "name": "commons-lang-2.1.jar", "size": 207723, "hashes": { "MD5": "51591549f1662a64543f08a1d4a0cf87", "SHA-1": "4763ecc9d78781c915c07eb03e90572c7ff04205", "SHA-256": "2ded7343dc8e57decd5e6302337139be020fdd885a2935925e8d575975e480b9", "SHA-512": "a312a5e33b17835f2e82e74ab52ab81f0dec01a7e72a2ba58bb76b6a197ffcd2bb410e341ef7b3720f3b595ce49fdd9994ea887ba08ff6fe21b2c714f8c405af" } }, { "name": "commons-lang-2.1.pom", "size": 9928, "hashes": { "MD5": "8e41bacdd69de9373c20326d231c8a5d", "SHA-1": "a34d992202615804c534953aba402de55d8ee47c", "SHA-256": "f1a709cd489f23498a0b6b3dfbfc0d21d4f15904791446dec7f8a58a7da5bd6a", "SHA-512": "1631ce8fe4101b6cde857f5b1db9b29b937f98ba445a60e76cc2b8f2a732ff24d19b91821a052c1b56b73325104e9280382b2520edda4e7696698165c7e09161" } }, { "name": "maven-metadata.xml", "size": 121, "hashes": { "MD5": "11bb3d48d984f2f49cea1e150b6fa371", "SHA-1": "7ef872be17357751ce65cb907834b6c5769998db", "SHA-256": "d04d140362ea8989a824a518439246e7194e719557e8d701831b7f5a8228411c", "SHA-512": "001813a0333ce4b2a47cf44900470bc2265ae65123a8c6b5ac5f2859184608596baa4d8ee0696d0a497755dade0f6bf5e54667215a06ceae1effdfb7a8d30f88" } }

即使校驗和不存儲為資產,Maven 客戶端仍然可以在預期的位置發布和下載校驗和。例如,如果commons-lang:commons-lang 2.1位於名為的存放庫中maven-repo,則 JAR 檔案 SHA-256 總和檢查碼的 URL 路徑為:

/maven/maven-repo/commons-lang/commons-lang/2.1/commons-lang-2.1.jar.sha256

如果您要將現有的 Maven 套件 (例如先前存放在 Amazon S3 的套件) 上傳到 CodeArtifact 使用一般 HTTP 用戶端curl,則不需要上傳總和檢查碼。 CodeArtifact 將自動生成它們。如果您要驗證資產是否已正確上傳,可以使用 ListPackageVersionAssets API 作業將回應中的總和檢查碼與每個資產的原始總和檢查碼值進行比較。

發佈期間的總和檢查碼不符

除了資產和校驗和,Maven 工件還包含一個maven-metadata.xml文件。Maven 包的正常發布順序是首先上傳的所有資產和校驗和,然後是maven-metadata.xml。例如,先前commons-lang 2.1描述的 Maven 套件版本的發佈順序 (假設用戶端設定為發行 SHA-256 總和檢查碼檔案) 將是:

PUT commons-lang-2.1.jar PUT commons-lang-2.1.jar.sha256 PUT commons-lang-2.1.pom PUT commons-lang-2.1.pom.sha256 PUT maven-metadata.xml PUT maven-metadata.xml.sha256

上傳資產 (例如 JAR 檔案) 的總和檢查碼檔案時,如果上傳的總和檢查碼值與計算的總和檢查碼值之間有不相符,則上傳要求將會失敗,並顯示 400 (錯誤請求) 回應 CodeArtifact。如果對應的資產不存在,請求將失敗並顯示 404(未找到)響應。若要避免此錯誤,您必須先上傳資產,然後上傳總和檢查碼。

上傳maven-metadata.xml時, CodeArtifact 通常會將 Maven 包版本的狀態從更改UnfinishedPublished。如果偵測到任何資產的總和檢查碼不符, CodeArtifact 將傳回 400 (錯誤請求) 以回應maven-metadata.xml發佈請求。此錯誤可能會導致用戶端停止上傳該套件版本的檔案。如果發生這種情況,且maven-metadata.xml檔案尚未上載,則無法下載已上傳之套件版本的任何資產。這是因為套件版本的狀態並未設定為Published且會保留Unfinished

CodeArtifact 允許將更多資產添加到 Maven 軟件包版本,即使maven-metadata.xml已上傳並且包版本狀態已設置為Published。在此狀態下,上傳不符合的總和檢查碼檔案的要求也會失敗,並出現 400 (錯誤要求) 回應。但是,由於套件版本狀態已設定為Published,因此您可以從套件下載任何資產,包括檢查碼檔案上傳失敗的資產。下載總和檢查碼檔案上傳失敗之資產的總和檢查碼時,用戶端收到的總和檢查碼值將是 CodeArtifact 根據上傳的資產資料計算的總和檢查碼值。

CodeArtifact 總和檢查碼比較區分大小寫,計算的總和檢查碼 CodeArtifact 會以小寫格式化。因此,如果校驗和909FA780F76DA393E992A3D2D495F468上傳,它將失敗並出現校驗和不匹配,因為它 CodeArtifact 不會將其視為等於909fa780f76da393e992a3d2d495f468

從校驗和不匹配中恢復

如果總和檢查碼上傳因為總和檢查碼不符而失敗,請嘗試下列其中一種方法來復原:

  • 運行再次發布 Maven 工件的命令。如果網絡問題損壞了校驗和文件,這可能會起作用。如果這樣可以解決網路問題,就會比對總和檢查碼,且下載成功。

  • 刪除套件版本,然後重新發佈。如需詳細資訊,請DeletePackageVersions參閱 AWS CodeArtifact API 參考中的。