

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Use CodeArtifact com mvn
<a name="maven-mvn"></a>

É possível usar o comando `mvn` para executar compilações do Maven. Esta seção mostra como configurar `mvn` para usar um CodeArtifact repositório.

**Topics**
+ [Buscar dependências](#fetching-dependencies)
+ [Publicar artefatos](#publishing-artifacts)
+ [Publicar artefatos de terceiros](#publishing-third-party-artifacts)
+ [Restringir downloads de dependências do Maven em um repositório CodeArtifact](#restrict-maven-downloads)
+ [Informações do Apache Maven Project](#apache-maven-project-info)

## Buscar dependências
<a name="fetching-dependencies"></a>

Para configurar `mvn` para buscar dependências de um CodeArtifact repositório, você deve editar o arquivo de configuração do Maven e, opcionalmente`settings.xml`, o POM do seu projeto.

1. Caso contrário, crie e armazene um token de CodeArtifact autenticação em uma variável de ambiente conforme descrito em [Passar um token de autenticação usando uma variável de ambiente](tokens-authentication.md#env-var) Para configurar a autenticação no seu CodeArtifact repositório.

1. Em `settings.xml` (geralmente encontrado em `~/.m2/settings.xml`), adicione uma seção `<servers>` com uma referência à variável de ambiente `CODEARTIFACT_AUTH_TOKEN` para que o Maven passe o token nas solicitações HTTP.

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

1. Adicione o endpoint de URL do seu CodeArtifact repositório em um `<repository>` elemento. Você pode fazer isso no `settings.xml` ou arquivo POM do seu projeto.

   Você pode recuperar o endpoint do seu repositório usando o comando. `get-repository-endpoint` AWS CLI 

   Por exemplo, com um repositório nomeado {{my\_repo}} dentro de um domínio chamado{{my\_domain}}, o comando é o seguinte:

   ```
   aws codeartifact get-repository-endpoint --domain my_domain --repository my_repo --format maven
   ```

   O comando `get-repository-endpoint` retornará o endpoint do repositório:

   ```
   url 'https://{{my_domain}}-{{111122223333}}.d.codeartifact.{{us-west-2}}.amazonaws.com/maven/{{my_repo}}/'
   ```
**nota**  
Para usar um endpoint de pilha dupla, use o endpoint `codeartifact.{{region}}.on.aws`.

   Adicione o endpoint do repositório ao `settings.xml` da seguinte forma.

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

   Ou você pode adicionar a `<repositories>` seção a um arquivo POM do projeto CodeArtifact para usar somente nesse projeto.

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

**Importante**  
Você pode usar qualquer valor no elemento `<id>`, mas ele deve ser o mesmo nos elementos `<server>` e `<repository>`. Isso permite que as credenciais especificadas sejam incluídas nas solicitações para CodeArtifact.

Depois de fazer essas alterações na configuração, você pode criar o projeto.

```
mvn compile
```

O Maven registra o URL completo de todas as dependências que ele baixa para o console.

```
[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)
```

## Publicar artefatos
<a name="publishing-artifacts"></a>

Para publicar um artefato do Maven em um CodeArtifact repositório, você também deve editar o POM do `~/.m2/settings.xml` projeto. `mvn`

1. Caso contrário, crie e armazene um token de CodeArtifact autenticação em uma variável de ambiente conforme descrito em [Passar um token de autenticação usando uma variável de ambiente](tokens-authentication.md#env-var) Para configurar a autenticação no seu CodeArtifact repositório.

1. Adicione uma seção `<servers>` a `settings.xml` com uma referência à variável de ambiente `CODEARTIFACT_AUTH_TOKEN` para que o Maven passe o token nas solicitações HTTP.

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

1. Adicione uma seção `<distributionManagement>` ao `pom.xml` do seu projeto.

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

Depois de fazer essas alterações na configuração, você pode criar o projeto e publicá-lo no repositório específico.

```
mvn deploy
```

Use `list-package-versions` para verificar se o pacote foi publicado com sucesso.

```
aws codeartifact list-package-versions --domain {{my_domain}} --domain-owner {{111122223333}} --repository {{my_repo}} --format {{maven}} \
  --namespace {{com.company.framework}} --package {{my-package-name}}
```

Exemplo de saída:

```
{
    "defaultDisplayVersion": null,
    "format": "{{maven}}",
    "namespace": "{{com.company.framework}}",
    "package": "{{my-package-name}}",
    "versions": [
        {
            "version": "1.0", 
            "revision": "REVISION-SAMPLE-1-C7F4S5E9B772FC",
            "status": "Published"
        }
    ]
}
```

## Publicar artefatos de terceiros
<a name="publishing-third-party-artifacts"></a>

Você pode publicar artefatos Maven de terceiros em um CodeArtifact repositório com. `mvn deploy:deploy-file` Isso pode ser útil para usuários que desejam publicar artefatos e têm somente arquivos JAR e não têm acesso ao código-fonte do pacote ou aos arquivos POM.

O comando `mvn deploy:deploy-file` gerará um arquivo POM com base nas informações passadas na linha de comando.

**Publicar artefatos Maven de terceiros**

1. Caso contrário, crie e armazene um token de CodeArtifact autenticação em uma variável de ambiente conforme descrito em [Passar um token de autenticação usando uma variável de ambiente](tokens-authentication.md#env-var) Para configurar a autenticação no seu CodeArtifact repositório.

1. Crie um arquivo `~/.m2/settings.xml` com o seguinte conteúdo:

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

1. Execute o comando `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}}/
   ```
**nota**  
O exemplo acima publica `commons-cli 1.4`. Modifique os argumentos groupID, artifactID, version e file para publicar um JAR diferente.

Essas instruções são baseadas em exemplos no [Guia para implantação de terceiros JARs em repositórios remotos](https://maven.apache.org/guides/mini/guide-3rd-party-jars-remote.html) da documentação do *Apache* Maven. 

## Restringir downloads de dependências do Maven em um repositório CodeArtifact
<a name="restrict-maven-downloads"></a>

 Se um pacote não puder ser obtido de um repositório configurado, por padrão, o `mvn` comando o buscará no Maven Central. Adicione o `mirrors` elemento para `settings.xml` fazer com que `mvn` sempre use seu CodeArtifact repositório.

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

Se você adicionar um elemento `mirrors`, você também deve ter um elemento `pluginRepository` em seu `settings.xml` ou `pom.xml`. O exemplo a seguir busca dependências de aplicativos e plug-ins do Maven de um repositório. CodeArtifact 

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

O exemplo a seguir busca dependências de aplicativos de um CodeArtifact repositório e busca plug-ins Maven do Maven Central.

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

## Informações do Apache Maven Project
<a name="apache-maven-project-info"></a>

Para obter mais informações sobre o Maven, consulte esses tópicos no site do Apache Maven Project:
+  [Configurar vários repositórios](https://maven.apache.org/guides/mini/guide-multiple-repositories.html) 
+  [Referência de configurações](https://maven.apache.org/settings.html) 
+  [Gerenciamento de distribuição](https://maven.apache.org/pom.html#Distribution_Management) 
+  [Perfis](https://maven.apache.org/pom.html#Profiles) 