

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Gradle과 함께 CodeArtifact 사용
<a name="maven-gradle"></a>

[환경 변수를 사용하여 인증 토큰 전달](tokens-authentication.md#env-var)에 설명된 대로 CodeArtifact 인증 토큰을 환경 변수에 저장한 후, 다음 지침에 따라 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. CodeArtifact 인증 토큰을 아직 만들지 않았다면 [환경 변수를 사용하여 인증 토큰 전달](tokens-authentication.md#env-var)의 절차에 따라 이 인증 토큰을 만들어 환경 변수에 저장하세요.

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\$1domain*이라는 도메인 내에 *my\$1repo*라는 리포지토리가 있는 경우, 명령은 다음과 같습니다.

   ```
   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 플러그인 포털](https://plugins.gradle.org/)에서 플러그인을 확인합니다. CodeArtifact 리포지토리에서 플러그인을 가져오려면 다음 절차를 사용합니다.

**CodeArtifact 리포지토리에서 플러그인을 가져오려면**

1. CodeArtifact 인증 토큰을 아직 만들지 않았다면 [환경 변수를 사용하여 인증 토큰 전달](tokens-authentication.md#env-var)의 절차에 따라 이 인증 토큰을 만들어 환경 변수에 저장하세요.

1. `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 플러그인 포털(예: `gradle-plugins-store`)에 대한 외부 연결이 있는 업스트림 리포지토리가 있어야 합니다. 자세한 내용은 [Gradle 설명서](https://docs.gradle.org/current/userguide/plugins.html#sec:custom_plugin_repositories)를 참조하세요.

## 아티팩트 게시
<a name="publishing-artifacts"></a>

이 섹션에서는 Gradle로 빌드한 Java 라이브러리를 CodeArtifact 리포지토리에 게시하는 방법을 설명합니다.

먼저 프로젝트의 `build.gradle` 파일 중 `plugins` 섹션에 `maven-publish` 플러그인을 추가합니다.

```
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` 섹션에 지정된 `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>

CodeArtifact에서 종속성을 가져오는 IntelliJ IDEA에서 Gradle 빌드를 실행할 수 있습니다. 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"
                }   
       }   
   }
   ```

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

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

------