

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 curl 进行发布
<a name="maven-curl"></a>

本节介绍如何使用 HTTP 客户端 `curl` 将 Maven 构件发布到 CodeArtifact 存储库。如果您的环境中没有 Maven 客户端或想要安装 Maven 客户端，则使用 `curl` 发布构件会很有用。

**使用 `curl` 发布 Maven 构件**

1. 按照 [使用环境变量传递身份验证令牌](tokens-authentication.md#env-var) 中的步骤提取 CodeArtifact 授权令牌，然后返回到这些步骤。

1. 使用以下 `curl` 命令将 JAR 发布到 CodeArtifact 存储库：

   在此程序中的每个 `curl` 命令中，替换以下占位符：
   + 将 {{my\_domain}} 替换为您的 CodeArtifact 域名。
   + 将 {{111122223333}} 替换为您的 CodeArtifact 域所有者的 ID。
   + 将 {{us-west-2}} 替换为您的 CodeArtifact 域所在的区域。
   + 将 {{my\_repo}} 替换为您的 CodeArtifact 存储库名称。

   ```
   curl --request PUT https://{{my_domain}}-{{111122223333}}.d.codeartifact.{{us-west-2}}.amazonaws.com/maven/{{my_repo}}/{{com/mycompany/app/my-app/1.0/my-app-1.0.jar}} \
        --user "aws:$CODEARTIFACT_AUTH_TOKEN" --header "Content-Type: application/octet-stream" \
        --data-binary @{{my-app-1.0.jar}}
   ```
**重要**  
必须在 `--data-binary` 参数的值前面加上一个 `@` 字符。将值放在引号中时，`@` 必须包含在引号内。

1. 使用以下 `curl` 命令将 POM 发布到 CodeArtifact 存储库：

   ```
   curl --request PUT https://{{my_domain}}-{{111122223333}}.d.codeartifact.{{us-west-2}}.amazonaws.com/maven/{{my_repo}}/{{com/mycompany/app/my-app/1.0/my-app-1.0.pom}} \
        --user "aws:$CODEARTIFACT_AUTH_TOKEN" --header "Content-Type: application/octet-stream" \
        --data-binary @{{my-app-1.0.pom}}
   ```

1. 此时，Maven 构件将位于您的 CodeArtifact 存储库中，状态为 `Unfinished`。为了能够使用程序包，程序包必须处于 `Published` 状态。您可以通过向程序包上传 `maven-metadata.xml` 文件来将程序包从 `Unfinished` 切换为 `Published`，或者调用 [UpdatePackageVersionsStatus API](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_UpdatePackageVersionsStatus.html) 来更改状态。

   1.  选项 1：使用以下 `curl` 命令将 `maven-metadata.xml` 文件添加到您的程序包中：

      ```
      curl --request PUT https://{{my_domain}}-{{111122223333}}.d.codeartifact.{{region}}.amazonaws.com/maven/{{my_repo}}/{{com/mycompany/app/my-app/maven-metadata.xml}} \
           --user "aws:$CODEARTIFACT_AUTH_TOKEN" --header "Content-Type: application/octet-stream" \
           --data-binary @{{maven-metadata.xml}}
      ```

      以下是 `maven-metadata.xml` 文件的内容示例：

      ```
      <metadata modelVersion="1.1.0">
          <groupId>com.mycompany.app</groupId>
          <artifactId>my-app</artifactId>
          <versioning>
              <latest>1.0</latest>
              <release>1.0</release>
              <versions>
                  <version>1.0</version>
              </versions>
              <lastUpdated>20200731090423</lastUpdated>
          </versioning>
      </metadata>
      ```

   1.  选项 2：使用 `UpdatePackageVersionsStatus` API 将程序包状态更新为 `Published`。

      ```
      aws codeartifact update-package-versions-status \
          --domain {{my_domain}} \
          --domain-owner {{111122223333}} \
          --repository {{my_repo}} \
          --format maven \
          --namespace {{com.mycompany.app}} \
          --package {{my-app}} \
          --versions {{1.0}} \
          --target-status Published
      ```

如果您只有构件的 JAR 文件，则可以使用 `mvn` 将可使用的程序包版本发布到 CodeArtifact 存储库。如果您无法访问构件的源代码或 POM，此方法会很有用。有关详细信息，请参阅[发布第三方构件](maven-mvn.md#publishing-third-party-artifacts)。