

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

# 使用 Maven 檢查總和
<a name="maven-checksums"></a>

 當 Maven 成品發佈至 AWS CodeArtifact 儲存庫時，與套件中每個*資產*或檔案相關聯的檢查總和會用來驗證上傳。資產的範例包括 *jar*、*pom* 和 *war* 檔案。對於每個資產，Maven 成品包含多個檢查總和檔案，這些檔案使用資產名稱搭配額外的副檔名，例如 `md5`或 `sha1`。例如，名為 的檔案檢查總和檔案`my-maven-package.jar`可能是 `my-maven-package.jar.md5`和 `my-maven-package.jar.sha1`。

**注意**  
 Maven 使用 一詞`artifact`。在本指南中，Maven 套件與 Maven 成品相同。如需詳細資訊，請參閱 [AWS CodeArtifact 套件](https://docs.aws.amazon.com/codeartifact/latest/ug/welcome.html#welcome-concepts-package)。

## 檢查總和儲存體
<a name="maven-checksum-storage"></a>

CodeArtifact 不會將 Maven 檢查總和儲存為資產。這表示檢查總和不會在 [ListPackageVersionAssets API](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_ListPackageVersionAssets.html) 的輸出中顯示為個別資產。反之，CodeArtifact 計算的檢查總和可用於所有支援的檢查總和類型中的每個資產。例如，在 Maven 套件版本上呼叫 ListPackageVersionAssets 的部分回應`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
```

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

## 發佈期間的檢查總和不相符
<a name="maven-checksum-mismatch"></a>

除了資產和檢查總和之外，Maven 成品也包含 `maven-metadata.xml` 檔案。Maven 套件的一般發佈順序是先上傳所有資產和檢查總和，接著上傳 `maven-metadata.xml`。例如，假設用戶端設定為發佈 SHA-256 檢查總和檔案，`commons-lang 2.1`前述 Maven 套件版本的發佈順序為：

```
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 檔案，如果上傳的檢查總和值與 CodeArtifact 計算的檢查總和值不相符，檢查總和上傳請求會失敗並顯示 **400 （無效的請求）** 回應。如果對應的資產不存在，請求將以 **404 （找不到）** 回應失敗。若要避免此錯誤，您必須先上傳資產，然後上傳檢查總和。

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

即使`maven-metadata.xml`已上傳且套件版本狀態已設為 ，CodeArtifact 也允許將其他資產新增至 Maven 套件版本`Published`。在此狀態下，上傳不相符檢查總和檔案的請求也會因 **400 （無效的請求）** 回應而失敗。不過，由於套件版本狀態已設為 `Published`，因此您可以從套件下載任何資產，包括檢查總和檔案上傳失敗的資產。在下載檢查總和檔案上傳失敗的資產時，用戶端收到的檢查總和值將是 CodeArtifact 根據上傳的資產資料計算的檢查總和值。

CodeArtifact 檢查總和比較區分大小寫，CodeArtifact 計算的檢查總和格式為小寫。因此，如果`909FA780F76DA393E992A3D2D495F468`上傳檢查總和，則檢查總和不相符會失敗，因為 CodeArtifact 不會將其視為等於 `909fa780f76da393e992a3d2d495f468`。

## 從檢查總和不相符中復原
<a name="maven-checksum-mismatch-recovery"></a>

如果檢查總和上傳因為檢查總和不相符而失敗，請嘗試下列其中一項來復原：
+ 執行再次發佈 Maven 成品的 命令。如果網路問題損毀了檢查總和檔案，這可能會起作用。如果這樣可以解決網路問題，檢查總和會相符且下載成功。
+ 刪除套件版本，然後重新發佈。如需詳細資訊，請參閱 *AWS CodeArtifact API 參考*中的 [DeletePackageVersions](https://docs.aws.amazon.com/dms/latest/APIReference/API_DeletePackageVersions.html)。