在 mvn 中使用 CodeArtifact - CodeArtifact

在 mvn 中使用 CodeArtifact

您可以使用 mvn 命令来执行 Maven 构建。本节说明如何配置 mvn 来使用 CodeArtifact 存储库。

提取依赖项

要将 mvn 配置为从 CodeArtifact 存储库提取依赖项,必须编辑 Maven 配置文件 settings.xml,并选择性地编辑项目 POM。

  1. 如果还没有这样做,请按使用环境变量传递身份验证令牌中所述在环境变量中创建并存储 CodeArtifact 身份验证令牌,以设置对 CodeArtifact 存储库的身份验证。

  2. settings.xml 中(该文件通常位于 ~/.m2/settings.xml),添加一个引用 CODEARTIFACT_AUTH_TOKEN 环境变量的 <servers> 部分,以便 Maven 可在 HTTP 请求中传递令牌。

    <settings> ... <servers> <server> <id>codeartifact</id> <username>aws</username> <password>${env.CODEARTIFACT_AUTH_TOKEN}</password> </server> </servers> ... </settings>
  3. <repository> 元素中添加 CodeArtifact 存储库的 URL 端点。您可以在 settings.xml 或项目的 POM 文件中执行此操作。

    您可以使用 get-repository-endpoint AWS CLI 命令检索存储库的端点。

    例如,如果在名为 my_domain 的域中有一个名为 my_repo 的存储库,则命令如下所示:

    aws codeartifact get-repository-endpoint --domain my_domain --repository my_repo --format maven

    get-repository-endpoint 命令会返回存储库端点:

    url 'https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/maven/my_repo/'
    注意

    要使用双堆栈端点,请使用 codeartifact.region.on.aws 端点。

    按如下方式将存储库端点添加到 settings.xml

    <settings> ... <profiles> <profile> <id>default</id> <repositories> <repository> <id>codeartifact</id> <url>https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/maven/my_repo/</url> </repository> </repositories> </profile> </profiles> <activeProfiles> <activeProfile>default</activeProfile> </activeProfiles> ... </settings>

    或者,您可以将 <repositories> 部分添加到项目 POM 文件中,以便仅对该项目使用 CodeArtifact。

    <project> ... <repositories> <repository> <id>codeartifact</id> <name>codeartifact</name> <url>https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/maven/my_repo/</url> </repository> </repositories> ... </project>
重要

可以在 <id> 元素中使用任何值,但必须与 <server><repository> 元素中的值相同。这样就可以在发送到 CodeArtifact 的请求中包括指定的凭证。

更改这些配置后,就可以构建项目了。

mvn compile

Maven 会记录下载到控制台的所有依赖项的完整 URL。

[INFO] ------------------< com.example.example:myapp >------------------- [INFO] Building myapp 1.0 [INFO] --------------------------------[ jar ]--------------------------------- Downloading from codeartifact: https://<domain>.d.codeartifact.us-west-2.amazonaws.com/maven/myrepo/commons-cli/commons-cli/1.4/commons-cli-1.4.pom Downloaded from codeartifact: https://<domain>.d.codeartifact.us-west-2.amazonaws.com/maven/myrepo/commons-cli/commons-cli/1.4/commons-cli-1.4.pom (11 kB at 3.9 kB/s) Downloading from codeartifact: https://<domain>.d.codeartifact.us-west-2.amazonaws.com/maven/myrepo/org/apache/commons/commons-parent/42/commons-parent-42.pom Downloading from codeartifact: https://<domain>.d.codeartifact.us-west-2.amazonaws.com/maven/myrepo/org/apache/commons/commons-parent/42/commons-parent-42.pom Downloaded from codeartifact: https://<domain>.d.codeartifact.us-west-2.amazonaws.com/maven/myrepo/org/apache/commons/commons-parent/42/commons-parent-42.pom (68 kB at 123 kB/s) Downloading from codeartifact: https://<domain>.d.codeartifact.us-west-2.amazonaws.com/maven/myrepo/commons-cli/commons-cli/1.4/commons-cli-1.4.jar Downloaded from codeartifact: https://<domain>.d.codeartifact.us-west-2.amazonaws.com/maven/myrepo/commons-cli/commons-cli/1.4/commons-cli-1.4.jar (54 kB at 134 kB/s)

发布构件

要使用 mvn 将 Maven 构件发布到 CodeArtifact 存储库,还必须编辑 ~/.m2/settings.xml 和项目 POM。

  1. 如果还没有这样做,请按使用环境变量传递身份验证令牌中所述在环境变量中创建并存储 CodeArtifact 身份验证令牌,以设置对 CodeArtifact 存储库的身份验证。

  2. settings.xml 中添加一个引用 CODEARTIFACT_AUTH_TOKEN 环境变量的 <servers> 部分,以便 Maven 可在 HTTP 请求中传递令牌。

    <settings> ... <servers> <server> <id>codeartifact</id> <username>aws</username> <password>${env.CODEARTIFACT_AUTH_TOKEN}</password> </server> </servers> ... </settings>
  3. <distributionManagement> 部分添加到项目的 pom.xml

    <project> ... <distributionManagement> <repository> <id>codeartifact</id> <name>codeartifact</name> <url>https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/maven/my_repo/</url> </repository> </distributionManagement> ... </project>

更改这些配置后,就可以开始构建项目并将项目发布到指定的存储库。

mvn deploy

使用 list-package-versions 来确认程序包已成功发布。

aws codeartifact list-package-versions --domain my_domain --domain-owner 111122223333 --repository my_repo --format maven \ --namespace com.company.framework --package my-package-name

示例输出:

{ "defaultDisplayVersion": null, "format": "maven", "namespace": "com.company.framework", "package": "my-package-name", "versions": [ { "version": "1.0", "revision": "REVISION-SAMPLE-1-C7F4S5E9B772FC", "status": "Published" } ] }

发布第三方构件

您可以使用 mvn deploy:deploy-file 将第三方 Maven 构件发布到 CodeArtifact 存储库。这对于想要发布构件且只有 JAR 文件且无权访问程序包源代码或 POM 文件的用户很有用。

mvn deploy:deploy-file 命令会根据命令行中传递的信息生成 POM 文件。

发布第三方 Maven 构件
  1. 如果还没有这样做,请按使用环境变量传递身份验证令牌中所述在环境变量中创建并存储 CodeArtifact 身份验证令牌,以设置对 CodeArtifact 存储库的身份验证。

  2. 创建 ~/.m2/settings.xml 文件并输入以下内容:

    <settings> <servers> <server> <id>codeartifact</id> <username>aws</username> <password>${env.CODEARTIFACT_AUTH_TOKEN}</password> </server> </servers> </settings>
  3. 运行 mvn deploy:deploy-file 命令:

    mvn deploy:deploy-file -DgroupId=commons-cli \ -DartifactId=commons-cli \ -Dversion=1.4 \ -Dfile=./commons-cli-1.4.jar \ -Dpackaging=jar \ -DrepositoryId=codeartifact \ -Durl=https://my_domain-111122223333.d.codeartifact.region.amazonaws.com/maven/repo-name/
    注意

    上面的示例会发布 commons-cli 1.4。修改 groupID、artifactID、version 和 file 参数来发布另一个 JAR。

这些说明基于 Apache Maven 文档将第三方 JAR 部署到远程存储库的指导中的示例。

限制为仅从 CodeArtifact 存储库下载 Maven 依赖项

如果无法从已配置的存储库提取程序包,则默认情况下,mvn 命令会从 Maven Central 提取程序包。将 mirrors 元素添加到 settings.xml,使 mvn 始终使用您的 CodeArtifact 存储库。

<settings> ... <mirrors> <mirror> <id>central-mirror</id> <name>CodeArtifact Maven Central mirror</name> <url>https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/maven/my_repo/</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors> ... </settings>

如果添加 mirrors 元素,则在 settings.xmlpom.xml 中还必须有一个 pluginRepository 元素。以下示例从 CodeArtifact 存储库提取应用程序依赖项和 Maven 插件。

<settings> ... <profiles> <profile> <pluginRepositories> <pluginRepository> <id>codeartifact</id> <name>CodeArtifact Plugins</name> <url>https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/maven/my_repo/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> ... </settings>

以下示例从 CodeArtifact 存储库提取应用程序依赖项,从 Maven Central 提取 Maven 插件。

<profiles> <profile> <id>default</id> ... <pluginRepositories> <pluginRepository> <id>central-plugins</id> <name>Central Plugins</name> <url>https://repo.maven.apache.org/maven2/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> .... </profile> </profiles>

Apache Maven 项目信息

有关 Maven 的更多信息,请参阅 Apache Maven Project 网站上的以下主题: