Migration tool (preview release)
The Amazon SDK for Java provides a migration tool that helps automate the migration of SDK for Java 1.x
code to 2.x. The tool uses OpenRewrite
You can use the tool now as a preview release. The tool supports all SDK service clients
except for AmazonS3Client
Use the migration tool
Migrate a Maven project
Follow the instructions below to migrate your SDK for Java 1.x Maven-based project by using
the OpenRewrite
Maven plugin
-
Navigate to your Maven project's root directory
Open a terminal (command line) window and navigate to the root directory of your Maven-based application.
-
Run the plugin's
rewrite-maven-plugin
commandYou can choose from two modes (Maven goals):
dryRun
andrun
.dryRun
modeIn the
dryRun
mode, the plugin generates diff logs in the console output and a patch file namedrewrite.patch
in thetarget/rewrite
folder. This mode allows you to preview the changes that would be made, since no changes are made to source code files.The following example show how to invoke the plugin in
dryRun
mode.mvn org.openrewrite.maven:rewrite-maven-plugin:dryRun \ -Drewrite.recipeArtifactCoordinates=software.amazon.awssdk:v2-migration:
<sdkversion>*
-PREVIEW \ -Drewrite.activeRecipes=software.amazon.awssdk.v2migration.AwsSdkJavaV1ToV2*Replace
<sdkversion>
with a 2.x SDK version. Visit Maven Centralto check for the latest version. Your console output from the
dryRun
mode should resemble the following output.[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
modeWhen you run the plugin in
run
mode, it modifies the source code on disk to apply the changes. Make sure you have a backup of the source code before running the command.The following example show how to invoke the plugin in
run
mode.mvn org.openrewrite.maven:rewrite-maven-plugin:run \ -Drewrite.recipeArtifactCoordinates=software.amazon.awssdk:v2-migration:
<sdkversion>*
-PREVIEW \ -Drewrite.activeRecipes=software.amazon.awssdk.v2migration.AwsSdkJavaV1ToV2*Replace
<sdkversion>
with a 2.x SDK version. Visit Maven Centralto check for the latest version. After you run the command, compile your application and run tests to verify the changes.
Migrate a Gradle project
Follow the instructions below to migrate your SDK for Java 1.x Grade-based project by using
the OpenRewrite Gradle plugin
-
Navigate to your Maven project's root directory
Open a terminal (command line) window and navigate to the root directory of your Gradle-based application.
-
Create a Gradle init script
Create a
init.gradle
file with the following content in the directory.initscript { repositories { maven { url "https://plugins.gradle.org/m2" } } dependencies { classpath("org.openrewrite:plugin:latest.release") } } rootProject { plugins.apply(org.openrewrite.gradle.RewritePlugin) dependencies { rewrite("software.amazon.awssdk:v2-migration:latest.release") } afterEvaluate { if (repositories.isEmpty()) { repositories { mavenCentral() } } } }
-
Run the
rewrite
commandAs with the Maven plugin, you can run the Gradle plugin in
dryRun
orrun
mode.dryRun
modeThe following example show how to invoke the plugin in
dryRun
mode.gradle rewriteDryRun --init-script init.gradle \ -Drewrite.activeRecipes=software.amazon.awssdk.v2migration.AwsSdkJavaV1ToV2
run
modeThe following example show how to invoke the plugin in
run
mode.gradle rewriteRun --init-script init.gradle \ -Drewrite.activeRecipes=software.amazon.awssdk.v2migration.AwsSdkJavaV1ToV2
Current limitations
The current preview release doesn’t support every feature in the SDK. Support for additional features will be added soon.
The tool does not currently support the following features. The links in the list below, take you to migration information to help you manually migrate the code.
-
S3 Client (AmazonS3Client), the tool currently supports
putObject
andgetObject
methods -
S3 Transfer Manager (TransferManager)
-
S3 URI Parsing (AmazonS3URI)
-
DynamoDB object mapping (DynamoDBMapper)
-
EC2 metadata utility (EC2MetadataUtils)
-
Waiters (AmazonDynamoDBWaiters)
-
IAM Policy Builder (Policy)
-
CloudFront presigning (CloudFrontUrlSigner, CloudFrontCookieSigner)
-
S3 Event Notifications (S3EventNotification)
-
SDK metric publishing (1.x documentation, 2.x documentation)