

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

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

Maven ビルドを実行するには、`mvn` コマンドを使用してください。このセクションでは、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>

`mvn`を設定して CodeArtifact リポジトリから依存関係を取得するには、Maven 設定ファイル `settings.xml`、オプションで、プロジェクトの POM を編集する必要があります。。

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

1. `settings.xml` (通常、`~/.m2/settings.xml`の場所にあります。) で、`CODEARTIFACT_AUTH_TOKEN` 環境変数を参照して `<servers>` セクションを追加し、HTTP リクエストで Maven が トークンを渡すようにします。

   ```
   <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}} という名前のドメイン内の {{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. `CODEARTIFACT_AUTH_TOKEN` 環境変数を参照して `<servers>` セクションを `settings.xml` に追加し、Maven が HTTP リクエストで トークンを渡すようにします。

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

1. `<distributionManagement>` セクションをプロジェクトの `pom.xml` に追加します。

   ```
   <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、version、およびファイルの引数を変更して、別の 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からパッケージを取得します。`mirrors`要素を`settings.xml`に追加して、`mvn`が常に CodeArtifact リポジトリを使用するようにします。

```
<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 プロジェクトウェブサイトの以下のトピックを参照してください。
+  [複数のリポジトリの設定](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) 