CodeArtifact 与 Gradle 搭配使用 - CodeArtifact

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

CodeArtifact 与 Gradle 搭配使用

按照使用环境变量传递 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_repo 在名为的域中 my_domain,命令如下所示:

    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

    注意

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

  3. (可选)-要使用 CodeArtifact 存储库作为项目依赖项的唯一来源,请repositories从中移除任何其他部分build.gradle。如果您有多个存储库,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部分中version指定的groupIdartifactId、和生成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 中运行 Gradle 构建 IDEA

你可以在 IDEA IntelliJ 中运行一个 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 } } } }