

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

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

`mvn` 명령을 사용하여 Maven 빌드를 실행합니다. 이 섹션에서는 CodeArtifact 리포지토리를 사용하도록 `mvn`을 구성하는 방법에 대해 설명합니다.

**Topics**
+ [종속성 가져오기](#fetching-dependencies)
+ [아티팩트 게시](#publishing-artifacts)
+ [타사 아티팩트 게시](#publishing-third-party-artifacts)
+ [CodeArtifact 리포지토리에서만 Maven 종속성을 다운로드](#restrict-maven-downloads)
+ [Apache Maven 프로젝트 정보](#apache-maven-project-info)

## 종속성 가져오기
<a name="fetching-dependencies"></a>

CodeArtifact 리포지토리에서 종속성을 가져오도록 `mvn`을 구성하려면 Maven 구성 파일, `settings.xml` 및 프로젝트의 POM(선택 사항)을 편집해야 합니다.

1. 아직 생성 및 저장을 하지 않았다면 CodeArtifact 리포지토리에 대한 인증을 설정하기 위해 [환경 변수를 사용하여 인증 토큰 전달](tokens-authentication.md#env-var)에 설명된 대로 환경 변수에 CodeArtifact 인증 토큰을 만들고 저장하십시오.

1. Maven이 HTTP 요청에서 토큰을 전달하도록 `settings.xml`(대체로 `~/.m2/settings.xml`에서 볼 수 있음)에서 `CODEARTIFACT_AUTH_TOKEN` 환경 변수에 대한 참조가 있는 `<servers>` 섹션을 추가합니다.

   ```
   <settings>
   ...
       <servers>
           <server>
               <id>codeartifact</id>
               <username>aws</username>
               <password>${env.CODEARTIFACT_AUTH_TOKEN}</password>
           </server>
       </servers>
   ...
   </settings>
   ```

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

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

`mvn`과 함께 Maven 아티팩트를 CodeArtifact 리포지토리에 게시하려면 `~/.m2/settings.xml` 및 프로젝트 POM도 편집해야 합니다.

1. 아직 생성 및 저장을 하지 않았다면 CodeArtifact 리포지토리에 대한 인증을 설정하기 위해 [환경 변수를 사용하여 인증 토큰 전달](tokens-authentication.md#env-var)에 설명된 대로 환경 변수에 CodeArtifact 인증 토큰을 만들고 저장하십시오.

1. Maven이 HTTP 요청에서 토큰을 전달하도록 `<servers>` 섹션을 `CODEARTIFACT_AUTH_TOKEN` 환경 변수에 대한 참조가 있는 `settings.xml`에 추가합니다.

   ```
   <settings>
   ...
       <servers>
           <server>
               <id>codeartifact</id>
               <username>aws</username>
               <password>${env.CODEARTIFACT_AUTH_TOKEN}</password>
           </server>
       </servers>
   ...
   </settings>
   ```

1. 프로젝트의 `pom.xml`에 `<distributionManagement>` 섹션을 추가합니다.

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

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

`mvn deploy:deploy-file`을 사용하여 타사 Maven 아티팩트를 CodeArtifact 리포지토리에 게시할 수 있습니다. 이는 JAR 파일만 가지고 있고 패키지 소스 코드나 POM 파일에는 액세스할 수 없는 사용자가 아티팩트를 게시하려고 할 때 도움이 될 수 있습니다.

이 `mvn deploy:deploy-file` 명령을 실행하면 명령줄에 전달된 정보를 기반으로 POM 파일이 생성됩니다.

**타사 Maven 아티팩트 게시**

1. 아직 생성 및 저장을 하지 않았다면 CodeArtifact 리포지토리에 대한 인증을 설정하기 위해 [환경 변수를 사용하여 인증 토큰 전달](tokens-authentication.md#env-var)에 설명된 대로 환경 변수에 CodeArtifact 인증 토큰을 만들고 저장하십시오.

1. 다음 콘텐츠가 포함된 `~/.m2/settings.xml` 파일을 생성합니다.

   ```
   <settings>
       <servers>
           <server>
               <id>codeartifact</id>
               <username>aws</username>
               <password>${env.CODEARTIFACT_AUTH_TOKEN}</password>
           </server>
       </servers>
   </settings>
   ```

1. `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, 버전 및 파일 인수를 수정하여 다른 JAR을 게시합니다.

이 지침은 **Apache Maven 설명서의 [타사 JAR을 원격 리포지토리에 배포하기 위한 가이드](https://maven.apache.org/guides/mini/guide-3rd-party-jars-remote.html)의 예제를 기반으로 합니다.

## CodeArtifact 리포지토리에서만 Maven 종속성을 다운로드
<a name="restrict-maven-downloads"></a>

 구성된 리포지토리에서 패키지를 가져올 수 없는 경우, 기본적으로 `mvn` 명령을 실행하면 Maven Central에서 패키지를 가져옵니다. `mvn`이 CodeArtifact 리포지토리를 항상 사용할 수 있도록 `mirrors` 요소를 `settings.xml`에 추가합니다.

```
<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.xml` 또는 `pom.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 프로젝트 정보
<a name="apache-maven-project-info"></a>

Maven에 관한 자세한 내용은 Apache Maven Project 웹 사이트에서 다음 주제를 참조하세요.
+  [여러 리포지토리 설정](https://maven.apache.org/guides/mini/guide-multiple-repositories.html) 
+  [설정 참조](https://maven.apache.org/settings.html) 
+  [배포 관리](https://maven.apache.org/pom.html#Distribution_Management) 
+  [프로파일](https://maven.apache.org/pom.html#Profiles) 