

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á.

# Ferramenta de migração do AWS SDK para Java
<a name="migration-tool"></a>

O AWS SDK para Java fornece uma ferramenta de migração que ajuda a automatizar a migração do código do SDK para Java 1.x (V1) para 2.x (V2). A ferramenta usa o [OpenRewrite](https://docs.openrewrite.org/), uma ferramenta de refatoração de código-fonte e código aberto, para fazer a migração. O OpenRewrite usa regras de modificação de código (chamadas de “receitas”) para atualizar automaticamente o código-fonte da sintaxe e dos padrões da V1 para a V2.

A ferramenta permite regras de modificação de código para clientes de serviços do SDK e para a biblioteca de alto nível do [Gerenciador de Transferências do S3](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/transfer/TransferManager.html). As regras de modificação de código para outras APIs de alto nível, como da V1 da API [https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/datamodeling/DynamoDBMapper.html](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/datamodeling/DynamoDBMapper.html) para a V2 da [API de cliente avançado do DynamoDB](dynamodb-enhanced-client.md) não são compatíveis. 

Consulte mais detalhes sobre limitações no [final desta página](#migration-tool-limitations). Consulte exemplos detalhados de padrões de código comuns sem suporte com etapas de migração manual em [Padrões de código sem suporte](migration-tool-unsupported-patterns.md).

## Usar a ferramenta de migração
<a name="migration-tool-use"></a>

### Migrar um projeto Maven
<a name="migration-tool-use-maven"></a>

Siga as instruções abaixo para migrar seu projeto baseado no Maven do SDK para Java 1.x usando a ferramenta de [plug-in OpenRewrite Maven](https://docs.openrewrite.org/reference/rewrite-maven-plugin).

1. Acesse o diretório-raiz do projeto Maven

   Abra uma janela de terminal (linha de comando) e acesse o diretório-raiz da aplicação baseada no Maven.

1. Execute o comando `rewrite-maven-plugin` do plugin

   É possível escolher entre dois modos (metas do Maven): `dryRun` e `run`.

   **`dryRun`**** Modo**

   No modo `dryRun`, o plug-in gera logs de diferenças na saída do console e um arquivo de patch chamado `rewrite.patch` na pasta `target/rewrite`. Esse modo permite que você visualize as alterações que seriam feitas, já que nenhuma alteração é feita nos arquivos de código-fonte. 

   O exemplo a seguir mostra como invocar o plug-in no modo `dryRun`.

   ```
   mvn org.openrewrite.maven:rewrite-maven-plugin:{{<rewrite-plugin-version>*}}:dryRun \
     -Drewrite.recipeArtifactCoordinates=software.amazon.awssdk:v2-migration:{{<sdkversion>**}} \
     -Drewrite.activeRecipes=software.amazon.awssdk.v2migration.AwsSdkJavaV1ToV2
   ```

   \*Substitua {{<rewrite-plugin-version>}} pelo valor de `rewriteMavenPluginVersion` exibido neste [arquivo de teste](https://github.com/aws/aws-sdk-java-v2/blob/3a01289246f1f4ac814a354051d00030e53ef968/test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/MavenTestBase.java#L54).

   \*\*Substitua {{<sdkversion>}} por uma versão 2.x do SDK. Confira a versão mais recente em [Maven Central](https://central.sonatype.com/artifact/software.amazon.awssdk/v2-migration). 
**Importante**  
Use a versão de `rewrite-maven-plugin` mostrada no [arquivo de teste](https://github.com/aws/aws-sdk-java-v2/blob/3a01289246f1f4ac814a354051d00030e53ef968/test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/MavenTestBase.java#L54), pois outras versões podem não funcionar.

   A saída do console do modo `dryRun` deve ser semelhante à saída a seguir.

   ```
   [WARNING] These recipes would make changes to project/src/test/resources/maven/before/pom.xml:
   [WARNING]     software.amazon.awssdk.v2migration.AwsSdkJavaV1ToV2
   [WARNING]         software.amazon.awssdk.v2migration.UpgradeSdkDependencies
   [WARNING]             org.openrewrite.java.dependencies.AddDependency: {groupId=software.amazon.awssdk, artifactId=apache-client, version=2.27.0, onlyIfUsing=com.amazonaws.ClientConfiguration}
   [WARNING]             org.openrewrite.java.dependencies.AddDependency: {groupId=software.amazon.awssdk, artifactId=netty-nio-client, version=2.27.0, onlyIfUsing=com.amazonaws.ClientConfiguration}
   [WARNING]             org.openrewrite.java.dependencies.ChangeDependency: {oldGroupId=com.amazonaws, oldArtifactId=aws-java-sdk-bom, newGroupId=software.amazon.awssdk, newArtifactId=bom, newVersion=2.27.0}
   [WARNING]             org.openrewrite.java.dependencies.ChangeDependency: {oldGroupId=com.amazonaws, oldArtifactId=aws-java-sdk-s3, newGroupId=software.amazon.awssdk, newArtifactId=s3, newVersion=2.27.0}
   [WARNING]             org.openrewrite.java.dependencies.ChangeDependency: {oldGroupId=com.amazonaws, oldArtifactId=aws-java-sdk-sqs, newGroupId=software.amazon.awssdk, newArtifactId=sqs, newVersion=2.27.0}
   [WARNING] These recipes would make changes to project/src/test/resources/maven/before/src/main/java/foo/bar/Application.java:
   [WARNING]     software.amazon.awssdk.v2migration.AwsSdkJavaV1ToV2
   [WARNING]         software.amazon.awssdk.v2migration.S3GetObjectConstructorToFluent
   [WARNING]             software.amazon.awssdk.v2migration.ConstructorToFluent
   [WARNING]         software.amazon.awssdk.v2migration.S3StreamingResponseToV2
   [WARNING]         software.amazon.awssdk.v2migration.ChangeSdkType
   [WARNING]         software.amazon.awssdk.v2migration.ChangeSdkCoreTypes
   [WARNING]             software.amazon.awssdk.v2migration.ChangeExceptionTypes
   [WARNING]                 org.openrewrite.java.ChangeType: {oldFullyQualifiedTypeName=com.amazonaws.AmazonClientException, newFullyQualifiedTypeName=software.amazon.awssdk.core.exception.SdkException}
   [WARNING]                 org.openrewrite.java.ChangeMethodName: {methodPattern=com.amazonaws.AmazonServiceException getRequestId(), newMethodName=requestId}
   [WARNING]                 org.openrewrite.java.ChangeMethodName: {methodPattern=com.amazonaws.AmazonServiceException getErrorCode(), newMethodName=awsErrorDetails().errorCode}
   [WARNING]                 org.openrewrite.java.ChangeMethodName: {methodPattern=com.amazonaws.AmazonServiceException getServiceName(), newMethodName=awsErrorDetails().serviceName}
   [WARNING]                 org.openrewrite.java.ChangeMethodName: {methodPattern=com.amazonaws.AmazonServiceException getErrorMessage(), newMethodName=awsErrorDetails().errorMessage}
   [WARNING]                 org.openrewrite.java.ChangeMethodName: {methodPattern=com.amazonaws.AmazonServiceException getRawResponse(), newMethodName=awsErrorDetails().rawResponse().asByteArray}
   [WARNING]                 org.openrewrite.java.ChangeMethodName: {methodPattern=com.amazonaws.AmazonServiceException getRawResponseContent(), newMethodName=awsErrorDetails().rawResponse().asUtf8String}
   [WARNING]                 org.openrewrite.java.ChangeType: {oldFullyQualifiedTypeName=com.amazonaws.AmazonServiceException, newFullyQualifiedTypeName=software.amazon.awssdk.awscore.exception.AwsServiceException}
   [WARNING]         software.amazon.awssdk.v2migration.NewClassToBuilderPattern
   [WARNING]             software.amazon.awssdk.v2migration.NewClassToBuilder
   [WARNING]             software.amazon.awssdk.v2migration.V1SetterToV2
   [WARNING]         software.amazon.awssdk.v2migration.V1GetterToV2
   ...
   [WARNING]         software.amazon.awssdk.v2migration.V1BuilderVariationsToV2Builder
   [WARNING]         software.amazon.awssdk.v2migration.NewClassToBuilderPattern
   [WARNING]             software.amazon.awssdk.v2migration.NewClassToBuilder
   [WARNING]             software.amazon.awssdk.v2migration.V1SetterToV2
   [WARNING]         software.amazon.awssdk.v2migration.HttpSettingsToHttpClient
   [WARNING]         software.amazon.awssdk.v2migration.WrapSdkClientBuilderRegionStr
   [WARNING] Patch file available:
   [WARNING]     project/src/test/resources/maven/before/target/rewrite/rewrite.patch
   [WARNING] Estimate time saved: 20m
   [WARNING] Run 'mvn rewrite:run' to apply the recipes.
   ```

   **`run`**** Modo**

   Quando você executa o plug-in no modo `run`, ele modifica o código-fonte no disco para aplicar as alterações. Faça backup do código-fonte antes de executar o comando.

   O exemplo a seguir mostra como invocar o plug-in no modo `run`.

   ```
   mvn org.openrewrite.maven:rewrite-maven-plugin:{{<rewrite-plugin-version>*}}:run \
     -Drewrite.recipeArtifactCoordinates=software.amazon.awssdk:v2-migration:{{<sdkversion>**}} \
     -Drewrite.activeRecipes=software.amazon.awssdk.v2migration.AwsSdkJavaV1ToV2
   ```

   \*Substitua {{<rewrite-plugin-version>}} pelo `rewriteMavenPluginVersionvalue` exibido neste [arquivo de teste](https://github.com/aws/aws-sdk-java-v2/blob/3a01289246f1f4ac814a354051d00030e53ef968/test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/MavenTestBase.java#L54).

   \*\*Substitua {{<sdkversion>}} por uma versão 2.x do SDK. Confira a versão mais recente em [Maven Central](https://central.sonatype.com/artifact/software.amazon.awssdk/v2-migration). 

   Depois de executar o comando, faça uma compilação da aplicação e realize testes para verificar as alterações. 

### Migrar um projeto Gradle
<a name="migration-tool-use-gradle"></a>

Siga as instruções abaixo para migrar seu projeto baseado no Gradle do SDK para Java 1.x usando a ferramenta de [plug-in OpenRewrite Gradle](https://docs.openrewrite.org/reference/gradle-plugin-configuration).

1. Acesse o diretório-raiz do projeto Gradle

   Abra uma janela de terminal (linha de comando) e acesse o diretório-raiz da aplicação baseada no Gradle.

1. Criar um script de inicialização do Gradle

   Crie um arquivo `init.gradle` com o conteúdo a seguir no diretório.

   ```
   initscript {
       repositories {
           maven { url "https://plugins.gradle.org/m2" }
       }
       dependencies {
           classpath("org.openrewrite:plugin:{{<rewrite-plugin-version>*}}")
       }
   }
   
   rootProject {
       plugins.apply(org.openrewrite.gradle.RewritePlugin)
       dependencies {
           rewrite("software.amazon.awssdk:v2-migration:latest.release")
       }
   
       afterEvaluate {
           if (repositories.isEmpty()) {
               repositories {
                   mavenCentral()
               }
           }
       }
   }
   ```

   \*Substitua {{<rewrite-plugin-version>}} pela versão exibida neste [arquivo de teste](https://github.com/aws/aws-sdk-java-v2/blob/master/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/gradle/before/init.gradle#L6).

1. Execute o comando `rewrite`

   Assim como no plug-in Maven, você pode executar o plug-in Gradle no modo `dryRun` or `run`.

   **Modo `dryRun`**

   O exemplo a seguir mostra como invocar o plug-in no modo `dryRun`.

   ```
   gradle rewriteDryRun --init-script init.gradle \
     -Drewrite.activeRecipes=software.amazon.awssdk.v2migration.AwsSdkJavaV1ToV2
   ```

   **Modo `run`**

   O exemplo a seguir mostra como invocar o plug-in no modo `run`.

   ```
   gradle rewriteRun --init-script init.gradle \
     -Drewrite.activeRecipes=software.amazon.awssdk.v2migration.AwsSdkJavaV1ToV2
   ```

## Limitações atuais
<a name="migration-tool-limitations"></a>

Embora a migração seja compatível com a maioria dos códigos da V1 por meio de regras de modificação de código que são atualizadas para o equivalente da V2, algumas classes e métodos não são abordados. Referente a essas classes e métodos, siga as [instruções passo a passo](migration-steps.md) para migrar o código manualmente.

Para algumas regras de modificação de código incompatíveis, a ferramenta de migração pode adicionar um comentário que comece com:

```
/*AWS SDK for Java v2 migration: Transform for ...
```

Após o comentário, a ferramenta gera um esboço genérico da versão V2 do método ou da classe. Por exemplo, na saída a seguir, a ferramenta de migração tentou migrar o método `setBucketLifecycleConfiguration` do cliente V1 do S3:

```
/*AWS SDK for Java v2 migration: Transform for setBucketLifecycleConfiguration method not supported. 
Please manually migrate your code by using builder pattern, update from BucketLifecycleConfiguration.Rule 
to LifecycleRule, StorageClass to TransitionStorageClass, and adjust imports and names.*/
s3.putBucketLifecycleConfiguration(
        PutBucketLifecycleConfigurationRequest.builder()
            .bucket(bucketName)
            .lifecycleConfiguration(BucketLifecycleConfiguration.builder()
                .build())
            .build());
```

Os links na lista abaixo abrem informações de migração para ajudar você a migrar o código manualmente.
+ [Diferenças do cliente S3 entre a versão 1 e a versão 2 do AWS SDK para Java](migration-s3-client.md)
+ [Gerenciador de Transferências do S3](migration-s3-transfer-manager.md) (TransferManager)
+ [Mapeamento de objetos do DynamoDB](migration-ddb-mapper.md) (DynamoDBMapper)
+ [Utilitário de metadados do EC2](migration-imds.md) (EC2MetadataUtils)
+ [Waiters](migration-waiters.md) (AmazonDynamoDBWaiters)
+ [Compilador de Políticas do IAM](migration-iam-policy-builder.md) (Policy)
+ [Pré-assinatura do CloudFront](migration-cloudfront-presigning.md) (CloudFrontUrlSigner, CloudFrontCookieSigner)
+ [Notificações de Eventos do S3](migration-s3-event-notification.md) (S3EventNotification)
+ Publicação de métricas do SDK ([documentação da 1.x](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/generating-sdk-metrics.html), [documentação da 2.x](metrics.md))
+ [Padrões de código incompatíveis](migration-tool-unsupported-patterns.md): exemplos detalhados de padrões de código comuns que exigem migração manual