

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# AWS SDK für Java Migrationstool
<a name="migration-tool"></a>

Das AWS SDK für Java bietet ein Migrationstool, mit dem die Migration von SDK for Java 1.x (V1) -Code auf 2.x (V2) automatisiert werden kann. Das Tool verwendet [OpenRewrite](https://docs.openrewrite.org/)— ein Open-Source-Tool zur Refaktorierung von Quellcode —, um die Migration durchzuführen. OpenRewrite verwendet Regeln zur Codeänderung (sogenannte „Rezepte“), um Ihren Quellcode automatisch von V1- auf V2-Syntax und Muster zu aktualisieren.

Das Tool unterstützt Regeln zur Codeänderung für SDK-Dienstclients und die allgemeine [S3 Transfer Manager-Bibliothek](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/transfer/TransferManager.html). Regeln zur Codeänderung für andere High-Level-Clients APIs wie die [DynamoDB Enhanced Client API](dynamodb-enhanced-client.md) von V1 [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)bis V2 werden nicht unterstützt. 

Weitere Informationen zu Einschränkungen finden Sie [am Ende dieser Seite](#migration-tool-limitations). Ausführliche Beispiele für häufig nicht unterstützte Codemuster mit manuellen Migrationsschritten finden Sie unter [Nicht unterstützte Codemuster](migration-tool-unsupported-patterns.md).

## Verwenden Sie das Migrationstool
<a name="migration-tool-use"></a>

### Migrieren Sie ein Maven-Projekt
<a name="migration-tool-use-maven"></a>

Folgen Sie den nachstehenden Anweisungen, um Ihr auf Maven basierendes SDK for Java 1.x-Projekt mithilfe des [OpenRewriteMaven-Plugin-Tools](https://docs.openrewrite.org/reference/rewrite-maven-plugin) zu migrieren.

1. Navigieren Sie zum Stammverzeichnis Ihres Maven-Projekts

   Öffnen Sie ein Terminalfenster (Befehlszeile) und navigieren Sie zum Stammverzeichnis Ihrer Maven-basierten Anwendung.

1. Führen Sie den Befehl des Plugins aus `rewrite-maven-plugin`

   Du kannst zwischen zwei Modi (Maven-Ziele) wählen: `dryRun` und`run`.

   **`dryRun`**** Modus**

   In diesem `dryRun` Modus generiert das Plugin Diff-Logs in der Konsolenausgabe und eine `rewrite.patch` im `target/rewrite` Ordner benannte Patch-Datei. In diesem Modus können Sie eine Vorschau der Änderungen anzeigen, die vorgenommen werden würden, da keine Änderungen an den Quellcodedateien vorgenommen werden. 

   Das folgende Beispiel zeigt, wie das Plugin im `dryRun` Modus aufgerufen wird.

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

   *<rewrite-plugin-version>*\$1Ersetzen Sie es durch den `rewriteMavenPluginVersion` Wert, den Sie in dieser [Testdatei](https://github.com/aws/aws-sdk-java-v2/blob/3a01289246f1f4ac814a354051d00030e53ef968/test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/MavenTestBase.java#L54) sehen.

   \$1\$1Durch eine 2.x SDK-Version *<sdkversion>* ersetzen. Besuchen Sie [Maven Central](https://central.sonatype.com/artifact/software.amazon.awssdk/v2-migration), um nach der neuesten Version zu suchen. 
**Wichtig**  
Stellen Sie sicher, dass Sie die in der [Testdatei `rewrite-maven-plugin`](https://github.com/aws/aws-sdk-java-v2/blob/3a01289246f1f4ac814a354051d00030e53ef968/test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/MavenTestBase.java#L54) angegebene Version verwenden, da andere Versionen möglicherweise nicht funktionieren.

   Ihre Konsolenausgabe aus dem `dryRun` Modus sollte der folgenden Ausgabe ähneln.

   ```
   [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`**** Modus**

   Wenn Sie das Plug-in im `run` Modus ausführen, ändert es den Quellcode auf der Festplatte, sodass die Änderungen übernommen werden. Stellen Sie sicher, dass Sie eine Sicherungskopie des Quellcodes haben, bevor Sie den Befehl ausführen.

   Das folgende Beispiel zeigt, wie das Plugin im `run` Modus aufgerufen wird.

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

   \$1Ersetze es *<rewrite-plugin-version>* durch `rewriteMavenPluginVersionvalue` das, was du in dieser [Testdatei](https://github.com/aws/aws-sdk-java-v2/blob/3a01289246f1f4ac814a354051d00030e53ef968/test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/MavenTestBase.java#L54) siehst.

   \$1\$1Durch eine 2.x SDK-Version *<sdkversion>* ersetzen. Besuchen Sie [Maven Central](https://central.sonatype.com/artifact/software.amazon.awssdk/v2-migration), um nach der neuesten Version zu suchen. 

   Nachdem Sie den Befehl ausgeführt haben, kompilieren Sie Ihre Anwendung und führen Sie Tests durch, um die Änderungen zu überprüfen. 

### Migrieren Sie ein Gradle-Projekt
<a name="migration-tool-use-gradle"></a>

[Folgen Sie den nachstehenden Anweisungen, um Ihr Gradle-basiertes SDK for Java 1.x-Projekt mithilfe des OpenRewrite Gradle-Plugin-Tools zu migrieren.](https://docs.openrewrite.org/reference/gradle-plugin-configuration)

1. Navigieren Sie zum Stammverzeichnis Ihres Gradle-Projekts

   Öffnen Sie ein Terminalfenster (Befehlszeile) und navigieren Sie zum Stammverzeichnis Ihrer Gradle-basierten Anwendung.

1. Erstellen Sie ein Gradle-Init-Skript

   Erstellen Sie eine `init.gradle` Datei mit dem folgenden Inhalt im Verzeichnis.

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

   *<rewrite-plugin-version>*\$1Ersetzen Sie durch die Version, die Sie in dieser [Testdatei](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) sehen.

1. Führen Sie den Befehl aus `rewrite`

   Wie beim Maven-Plugin können Sie das Gradle-Plugin im Modus `dryRun` oder `run` ausführen.

   **`dryRun` Modus**

   Das folgende Beispiel zeigt, wie das Plugin im Modus aufgerufen wird. `dryRun`

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

   **`run` Modus**

   Das folgende Beispiel zeigt, wie das Plugin im `run` Modus aufgerufen wird.

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

## Aktuelle Einschränkungen
<a name="migration-tool-limitations"></a>

Die Migration unterstützt zwar den Großteil des V1-Codes durch Regeln zur Codeänderung, die auf das V2-Äquivalent aktualisiert werden, einige Klassen und Methoden sind jedoch nicht abgedeckt. Folgen Sie für diese Klassen und Methoden den [step-by-step Anweisungen](migration-steps.md), um Ihren Code manuell zu migrieren.

Bei einigen Regeln zur Codeänderung, die nicht unterstützt werden, fügt das Migrationstool möglicherweise einen Kommentar hinzu, der wie folgt beginnt:

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

Im Anschluss an den Kommentar gibt das Tool einen generischen Stub der V2-Version der Methode oder Klasse aus. In der folgenden Ausgabe hat das Migrationstool beispielsweise versucht, die `setBucketLifecycleConfiguration` Methode des V1 S3-Clients zu migrieren:

```
/*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());
```

Über die Links in der folgenden Liste gelangen Sie zu Migrationsinformationen, die Ihnen bei der manuellen Migration des Codes helfen.
+ [S3-Client-Unterschiede zwischen Version 1 und Version 2 von AWS SDK für Java](migration-s3-client.md)
+ [S3-Übertragungsmanager](migration-s3-transfer-manager.md) (TransferManager)
+ [DynamoDB-Objektzuordnung](migration-ddb-mapper.md) (Dynamo) DBMapper
+ [EC2 Metadaten-Hilfsprogramm](migration-imds.md) () EC2 MetadataUtils
+ [Kellner](migration-waiters.md) () AmazonDynamo DBWaiters
+ [IAM Policy Builder](migration-iam-policy-builder.md) (Richtlinie)
+ [CloudFront vorsignieren](migration-cloudfront-presigning.md) (CloudFrontUrlSigner,) CloudFrontCookieSigner
+ [S3-Ereignisbenachrichtigungen](migration-s3-event-notification.md) (S3EventNotification)
+ Veröffentlichung von SDK-Metriken ([1.x-Dokumentation](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/generating-sdk-metrics.html), [2.x-Dokumentation](metrics.md))
+ [Nicht unterstützte Codemuster](migration-tool-unsupported-patterns.md) — Detaillierte Beispiele für gängige Codemuster, die eine manuelle Migration erfordern

# Nicht unterstützte Codemuster des Migrationstools
<a name="migration-tool-unsupported-patterns"></a>

Das Migrationstool konvertiert den größten Teil des v1-Codes automatisch in den v2-Code. Einige Codemuster erfordern jedoch eine manuelle Migration. Dieses Thema enthält detaillierte Beispiele für die häufigsten nicht unterstützten Muster und zeigt Ihnen, wie Sie sie manuell konvertieren können.

Die folgende Liste von Mustern erhebt keinen Anspruch auf Vollständigkeit. Wenn Ihr Code nach der Ausführung des Migrationstools nicht kompiliert werden kann, folgen Sie den [step-by-stepMigrationsanweisungen](migration-steps.md), um den verbleibenden v1-Code manuell zu migrieren.

## Fordern Sie Objektkonstruktoren mit Parametern an
<a name="request-pojo-constructors"></a>

Auf Anfrage POJOs (außer Amazon S3) transformiert das Migrationstool nur Setter-Methoden. Das Tool unterstützt keine Konstruktoren mit Parametern.

**Unterstütztes Muster: Objekt mithilfe von Setter anfordern (keine Konstruktorparameter)**

Vorher (ursprünglicher v1-Code):

```
import com.amazonaws.services.sqs.model.SendMessageRequest;

SendMessageRequest request = new SendMessageRequest().withMessageBody("Hello World");
request.setQueueUrl("https://sqs.us-west-2.amazonaws.com/0123456789012/demo-queue");
```

Nachher (Ergebnis des Migrationstools):

```
import software.amazon.awssdk.services.sqs.model.SendMessageRequest;

SendMessageRequest request = SendMessageRequest.builder()
    .messageBody("Hello World").build();
request = request.toBuilder()
    .queueUrl("https://sqs.us-west-2.amazonaws.com/0123456789012/demo-queue").build();
```

**Nicht unterstütztes Muster: Objektkonstruktor mit Parametern anfordern**

Das Migrationstool kann Konstruktoren mit folgenden Parametern nicht konvertieren:

Vor der manuellen Migration, aber nach dem Migrationstool:

```
import software.amazon.awssdk.services.sqs.model.SendMessageRequest; // Import updated to v2.

// This pattern requires manual migration.
SendMessageRequest request = new SendMessageRequest(
    "https://sqs.us-west-2.amazonaws.com/0123456789012/demo-queue", 
    "Hello World");
```

Das Migrationstool wandelt den Import in Version 2 um, der Konstruktorcode bleibt jedoch unverändert und erfordert manuelle Updates, um das Builder-Muster verwenden zu können.

Nach der manuellen Migration:

```
import software.amazon.awssdk.services.sqs.model.SendMessageRequest;

SendMessageRequest request = SendMessageRequest.builder()
    .messageBody("Hello World")
    .queueUrl("https://sqs.us-west-2.amazonaws.com/0123456789012/demo-queue")
    .build();
```

## Service-Client-Methoden mit individuellen Parametern
<a name="service-client-method-overloads"></a>

Das Migrationstool kann keine Service-Client-Methoden konvertieren, die einzelne Parameter anstelle von Anforderungsobjekten verwenden (außer Amazon S3).

Vorher (v1-Code):

```
import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.AmazonSQSClient;

AmazonSQS sqs = new AmazonSQSClient();
// The following v1 method takes individual parameters.
sqs.sendMessage("https://sqs.us-west-2.amazonaws.com/0123456789012/demo-queue", "Hello World");
```

Nachher (Ergebnis des Migrationstools — wird nicht kompiliert):

```
import software.amazon.awssdk.services.sqs.SqsClient;  // Import updated to v2.
// No import statement for the v2 request POJO.

SqsClient sqs = SqsClient.builder().build();

// Does not compile–v2 methods only accept request POJOs.
sqs.sendMessage("https://sqs.us-west-2.amazonaws.com/0123456789012/demo-queue", "Hello World");
```

Sie müssen die Methodenargumente manuell aktualisieren, um ein Anforderungsobjekt zu verwenden:

```
import software.amazon.awssdk.services.sqs.SqsClient;
import software.amazon.awssdk.services.sqs.model.SendMessageRequest; // Add manually.

SqsClient sqs = SqsClient.builder().build();

// Corrected v2 code.
SendMessageRequest request = SendMessageRequest.builder()
    .queueUrl("https://sqs.us-west-2.amazonaws.com/0123456789012/demo-queue")
    .messageBody("Hello World")
    .build();
sqs.sendMessage(request);
```

## Timeout-Methoden anfordern
<a name="request-pojo-timeout-configuration"></a>

Das Migrationstool konvertiert keine Methoden, die Timeouts für Anforderungsobjekte festlegen.

Vorher (v1-Code):

```
import com.amazonaws.services.sqs.model.SendMessageRequest;

SendMessageRequest request = new SendMessageRequest();
request.setSdkRequestTimeout(7);
```

Nachher (Ergebnis des Migrationstools — wird nicht kompiliert):

```
import software.amazon.awssdk.services.sqs.model.SendMessageRequest;  // Import updated to v2.

SendMessageRequest request = SendMessageRequest.builder().build();

// Does not compile.
request.setSdkRequestTimeout(7);
```

Sie müssen manuell migrieren, um die Methode von v2 zu verwenden: `overrideConfiguration`

```
import software.amazon.awssdk.services.sqs.model.SendMessageRequest;
import java.time.Duration;

SendMessageRequest request = SendMessageRequest.builder().build();

// Corrected v2 code.
request = request.toBuilder()
    .overrideConfiguration(o -> o.apiCallTimeout(Duration.ofSeconds(7)))
    .build();
```

## Bedienen Sie Client-Konstruktoren mit Parametern
<a name="service-client-constructors-with-args"></a>

Das Migrationstool konvertiert leere Service-Client-Konstruktoren, kann jedoch keine Konstruktoren konvertieren, die Parameter wie Anmeldeinformationen oder Konfiguration akzeptieren.

Vorher (v1-Code):

```
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.AmazonSQSClient;

AWSCredentials awsCredentials = new BasicAWSCredentials("akid", "skid");
AmazonSQS sqs = new AmazonSQSClient(awsCredentials);
```

Nachher (Ergebnis des Migrationstools — wird nicht kompiliert):

```
import software.amazon.awssdk.auth.credentials.AwsCredentials;
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.services.sqs.SqsClient;  // Import updated to v2.

AwsCredentials awsCredentials = AwsBasicCredentials.create("akid", "skid");

// Does not compile.
SqsClient sqs = new SqsClient(awsCredentials);
```

Sie müssen den Service-Client-Konstruktor manuell aktualisieren, um das Builder-Muster zu verwenden:

```
import software.amazon.awssdk.auth.credentials.AwsCredentials;
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;  // Add manually.
import software.amazon.awssdk.services.sqs.SqsClient;

AwsCredentials awsCredentials = AwsBasicCredentials.create("akid", "skid");

// Corrected v2 code.
SqsClient sqs = SqsClient.builder()
    .credentialsProvider(StaticCredentialsProvider.create(awsCredentials))
    .build();
```