在 Gradle 中使用 CodeArtifact - CodeArtifact

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

在 Gradle 中使用 CodeArtifact

按照使用环境变量传递身份验证令牌中所述,将 CodeArtifact 身份验证令牌存入环境变量后,请按照以下说明使用来自 CodeArtifact 存储库的 Maven 程序包,以及将新程序包发布到 CodeArtifact 存储库。

提取依赖项

要在 Gradle 构建中提取来自 CodeArtifact 的依赖项,请遵循以下程序。

在 Gradle 构建中提取来自 CodeArtifact 的依赖项
  1. 如果还没有身份验证令牌,请按照使用环境变量传递身份验证令牌中的步骤创建 CodeArtifact 身份验证令牌并将其存储在环境变量中。

  2. 在项目 build.gradle 文件中的 repositories 部分添加一个 maven 部分。

    maven { url 'https://my_domain-111122223333.d.codeartifact.region.amazonaws.com/maven/my_repo/' credentials { username "aws" password System.env.CODEARTIFACT_AUTH_TOKEN } }

    前面示例中的 url 是 CodeArtifact 存储库的端点。Gradle 使用端点来连接到您的存储库。在示例中,my_domain 是域的名称,111122223333 是域所有者的 ID,my_repo 是存储库的名称。您可以使用 get-repository-endpoint AWS CLI 命令检索存储库的端点。

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

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

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

    url 'https://my_domain-111122223333.d.codeartifact.region.amazonaws.com/maven/my_repo/'

    前面示例中的 credentials 对象包括您在步骤 1 中创建的 CodeArtifact 身份验证令牌,Gradle 使用该令牌对 CodeArtifact 进行身份验证。

  3. (可选)- 要使用 CodeArtifact 存储库作为项目依赖项的唯一来源,请从 build.gradlerepositories 中移除任何其他部分。如果您有多个存储库,Gradle 会按照列出的顺序在每个存储库中搜索依赖项。

  4. 配置存储库后,您可以使用标准 Gradle 语法在 dependencies 部分添加项目依赖项。

    dependencies { implementation 'com.google.guava:guava:27.1-jre' implementation 'commons-cli:commons-cli:1.4' testImplementation 'org.testng:testng:6.14.3' }

提取插件

默认情况下,Gradle 会解析来自公有 Gradle 插件门户的插件。要从 CodeArtifact 存储库提取插件,请按以下步骤操作。

从 CodeArtifact 存储库提取插件
  1. 如果还没有身份验证令牌,请按照使用环境变量传递身份验证令牌中的步骤创建 CodeArtifact 身份验证令牌并将其存储在环境变量中。

  2. settings.gradle 文件中添加一个 pluginManagement 块。pluginManagement 块必须出现在 settings.gradle 中的任何其他语句之前,请参阅以下代码段:

    pluginManagement { repositories { maven { name 'my_repo' url 'https://my_domain-111122223333.d.codeartifact.region.amazonaws.com/maven/my_repo/' credentials { username 'aws' password System.env.CODEARTIFACT_AUTH_TOKEN } } } }

这将确保 Gradle 会解析来自指定存储库的插件。存储库必须有一个与 Gradle 插件门户网站(例如 gradle-plugins-store)有外部连接的上游存储库,以便构建版本可以使用常用的 Gradle 插件。有关更多信息,请参阅 Gradle 文档

发布构件

本节介绍如何将使用 Gradle 构建的 Java 库发布到 CodeArtifact 存储库。

首先,将 maven-publish 插件添加到项目 build.gradle 文件的 plugins 部分。

plugins { id 'java-library' id 'maven-publish' }

接下来,在项目 build.gradle 文件中添加一个 publishing 部分。

publishing { publications { mavenJava(MavenPublication) { groupId = 'group-id' artifactId = 'artifact-id' version = 'version' from components.java } } repositories { maven { url 'https://my_domain-111122223333.d.codeartifact.region.amazonaws.com/maven/my_repo/' credentials { username "aws" password System.env.CODEARTIFACT_AUTH_TOKEN } } } }

maven-publish 插件根据 publishing 部分中指定的 groupIdartifactIdversion 生成 POM 文件。

build.gradle 作出的这些更改完成后,运行以下命令来构建项目并将其上传到存储库。

./gradlew publish

使用 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

示例输出:

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

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

在 IntelliJ IDEA 中运行 Gradle 构建

您可以在 IntelliJ IDEA 中运行 Gradle 构建,从 CodeArtifact 提取依赖项。要使用 CodeArtifact 进行身份验证,您必须向 Gradle 提供 CodeArtifact 授权令牌。提供身份验证令牌的方法有三种。

  • 方法 1:将身份验证令牌存储在 gradle.properties 中。如果您能够覆盖 gradle.properties 文件或添加内容,请使用此方法。

  • 方法 2:将身份验证令牌存储在单独的文件中。如果您不想修改 gradle.properties 文件,请使用此方法。

  • 方法 3:通过在 build.gradle 中以内联脚本形式运行 aws,为每次运行生成新的身份验证令牌。如果您希望 Gradle 脚本在每次运行时都提取一个新令牌,请使用此方法。令牌不会存储在文件系统中。

Token stored in gradle.properties
方法 1:将身份验证令牌存储在 gradle.properties
注意

该示例显示了位于 GRADLE_USER_HOME 中的 gradle.properties 文件。

  1. 使用以下代码段来更新 build.gradle 文件:

    repositories { maven { url 'https://my_domain-111122223333.d.codeartifact.region.amazonaws.com/maven/my_repo/' credentials { username "aws" password "$codeartifactToken" } } }
  2. 要从 CodeArtifact 提取插件,请在 settings.gradle 文件中添加一个 pluginManagement 块。pluginManagement 块必须出现在 settings.gradle 中的任何其他语句之前。

    pluginManagement { repositories { maven { name 'my_repo' url 'https://my_domain-111122223333.codeartifact.region.amazonaws.com/maven/my_repo/' credentials { username 'aws' password "$codeartifactToken" } } } }
  3. 提取 CodeArtifact 身份验证令牌:

    export CODEARTIFACT_AUTH_TOKEN=`aws codeartifact get-authorization-token --domain my_domain --domain-owner 111122223333 --query authorizationToken --output text --profile profile-name`
  4. 将身份验证令牌写入 gradle.properties 文件中:

    echo "codeartifactToken=$CODEARTIFACT_AUTH_TOKEN" > ~/.gradle/gradle.properties
Token stored in separate file
方法 2:将身份验证令牌存储在单独的文件中
  1. 使用以下代码段来更新 build.gradle 文件:

    def props = new Properties() file("file").withInputStream { props.load(it) } repositories { maven { url 'https://my_domain-111122223333.d.codeartifact.region.amazonaws.com/maven/my_repo/' credentials { username "aws" password props.getProperty("codeartifactToken") } } }
  2. 要从 CodeArtifact 提取插件,请在 settings.gradle 文件中添加一个 pluginManagement 块。pluginManagement 块必须出现在 settings.gradle 中的任何其他语句之前。

    pluginManagement { def props = new Properties() file("file").withInputStream { props.load(it) } repositories { maven { name 'my_repo' url 'https://my_domain-111122223333.codeartifact.region.amazonaws.com/maven/my_repo/' credentials { username 'aws' password props.getProperty("codeartifactToken") } } } }
  3. 提取 CodeArtifact 身份验证令牌:

    export CODEARTIFACT_AUTH_TOKEN=`aws codeartifact get-authorization-token --domain my_domain --domain-owner 111122223333 --query authorizationToken --output text --profile profile-name`
  4. 将身份验证令牌写入在 build.gradle 文件中指定的文件:

    echo "codeartifactToken=$CODEARTIFACT_AUTH_TOKEN" > file
Token generated for each run in build.gradle
方法 3:通过在 build.gradle 中以内联脚本形式运行 aws,为每次运行生成新的身份验证令牌
  1. 使用以下代码段来更新 build.gradle 文件:

    def codeartifactToken = "aws codeartifact get-authorization-token --domain my_domain --domain-owner 111122223333 --query authorizationToken --output text --profile profile-name".execute().text repositories { maven { url 'https://my_domain-111122223333.d.codeartifact.region.amazonaws.com/maven/my_repo/' credentials { username "aws" password codeartifactToken } } }
  2. 要从 CodeArtifact 提取插件,请在 settings.gradle 文件中添加一个 pluginManagement 块。pluginManagement 块必须出现在 settings.gradle 中的任何其他语句之前。

    pluginManagement { def codeartifactToken = "aws codeartifact get-authorization-token --domain my_domain --domain-owner 111122223333 --query authorizationToken --output text --profile profile-name".execute().text repositories { maven { name 'my_repo' url 'https://my_domain-111122223333.codeartifact.region.amazonaws.com/maven/my_repo/' credentials { username 'aws' password codeartifactToken } } } }