

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Gradle で CodeArtifact を使用する
<a name="maven-gradle"></a>

環境変数に CodeArtifact 認証トークンを取得した後、[環境変数を使用して認証トークンを渡す](tokens-authentication.md#env-var) の指示に従って、CodeArtifact リポジトリから Maven パッケージを使用し、新しいパッケージを CodeArtifact リポジトリに公開します。

**Topics**
+ [依存関係の取得](#fetching-dependencies)
+ [プラグインの取得](#fetching-plugins)
+ [アーティファクトの公開](#publishing-artifacts)
+ [IntelliJ IDEAで Gradle ビルドを実行する](#gradle-intellij)

## 依存関係の取得
<a name="fetching-dependencies"></a>

Gradle ビルドの CodeArtifact から依存関係を取得するには、次の手順に従います。

**Gradle ビルドの CodeArtifact から依存関係を取得するには**

1. まだ実行していない場合は、「[環境変数を使用して認証トークンを渡す](tokens-authentication.md#env-var)」の手順に従って CodeArtifact 認証トークンを作成して環境変数に保存します。

1. プロジェクトファイル `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}} という名前の ドメイン内の{{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 の認証に使用します。
**注記**  
デュアルスタックエンドポイントを使用するには、`codeartifact.{{region}}.on.aws` エンドポイントを使用してください。

1. (オプション) CodeArtifact リポジトリをプロジェクトの依存関係の唯一のソースとして使用するには、`build.gradle` から `repositories` 内の他のセクションを削除します。複数のリポジトリがある場合、Gradle はリストされている順序で各リポジトリの依存関係を検索します。

1. リポジトリを構成したら、プロジェクトの依存関係を標準の 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'
   }
   ```

## プラグインの取得
<a name="fetching-plugins"></a>

デフォルトでは、Gradle はパブリック [Gradle Plugin Portal](https://plugins.gradle.org/) からプラグインを解決します。CodeArtifact リポジトリからプラグインをプルするには、次の手順に従います。

**CodeArtifact リポジトリからプラグインをプルするには**

1. まだ実行していない場合は、「[環境変数を使用して認証トークンを渡す](tokens-authentication.md#env-var)」の手順に従って CodeArtifact 認証トークンを作成して環境変数に保存します。

1. `pluginManagement` ブロックを `settings.gradle` ファイルに追加します。`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 Plugin Portal への外部接続を持つ上流リポジトリが必要です (例: `gradle-plugins-store`) 。詳細については、[Gradle ドキュメント](https://docs.gradle.org/current/userguide/plugins.html#sec:custom_plugin_repositories) を参照してください。

## アーティファクトの公開
<a name="publishing-artifacts"></a>

このセクションでは、Gradle でビルドされた Java ライブラリを CodeArtifact リポジトリに公開する方法について説明します。

まず、`maven-publish` プラグインをプロジェクトの `build.gradle` ファイルの `plugins` セクションに追加します。

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

次に、`publishing` セクションをプロジェクト `build.gradle` ファイルに追加します。

```
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` セクションで指定された `groupId`、`artifactId` および `version` に基づいて 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 ウェブサイトで以下のトピックを参照してください。
+  [Java ライブラリの構築](https://guides.gradle.org/building-java-libraries/) 
+  [プロジェクトをモジュールとして公開する](https://docs.gradle.org/current/userguide/publishing_setup.html) 

## IntelliJ IDEAで Gradle ビルドを実行する
<a name="gradle-intellij"></a>

IntelliJ IDEAで、CodeArtifact から依存関係をプルする Gradle ビルドを実行できます。CodeArtifact で認証するには、CodeArtifact 認可トークンを Gradle に提供する必要があります。認証トークンを提供する方法は 3 つあります。
+ 方法 1: `gradle.properties` に認証トークンを保存する。この方法は、`gradle.properties` ファイルのコンテンツに上書きまたは追加できる場合に使用します。
+ 方法 2: 認証トークンを別のファイルに保存する。この方法は、`gradle.properties` ファイルを修正したくない場合に使用します。
+ 方法 3: `aws` を `build.gradle` のインラインスクリプトとして実行して、実行ごとに新しい認証トークンを生成する。この方法は、実行ごとに 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"
                }   
       }   
   }
   ```

1. 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"
               }
           }
       }
   }
   ```

1. CodeArtifact 認証トークンを取得します。

   ```
   export CODEARTIFACT_AUTH_TOKEN=`aws codeartifact get-authorization-token --domain {{my_domain}} --domain-owner {{111122223333}} --query authorizationToken --output text --profile {{profile-name}}`
   ```

1. `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")
                }
       }
   }
   ```

1. 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")
               }
           }
       }
   }
   ```

1. CodeArtifact 認証トークンを取得します。

   ```
   export CODEARTIFACT_AUTH_TOKEN=`aws codeartifact get-authorization-token --domain {{my_domain}} --domain-owner {{111122223333}} --query authorizationToken --output text --profile {{profile-name}}`
   ```

1. `build.gradle` ファイルで指定したファイルに認証トークンを書き込みます。

   ```
   echo "codeartifactToken=$CODEARTIFACT_AUTH_TOKEN" > {{file}}
   ```

------
#### [ Token generated for each run in build.gradle ]

**方法 3: `aws` を `build.gradle` のインラインスクリプトとして実行して、実行ごとに新しい認証トークンを生成する。**

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
               }
           }
       }
   ```

1. 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
               }
           }
       }
   }
   ```

------