

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 適用於 Java 的 AWS SDK 1.x 和 2.x 之間的差異
<a name="migration-whats-different"></a>

本節說明將應用程式從 1.x 適用於 Java 的 AWS SDK 版轉換為 2.x 版時要注意的主要變更。

## 套件名稱變更
<a name="mig-diff-package-name-change"></a>

從適用於 Java 的 SDK 1.x 到適用於 Java 的 SDK 2.x 的明顯變更是套件名稱變更。套件名稱在 SDK 2.x `software.amazon.awssdk`中以 開頭，而 SDK 1.x 使用 。 `com.amazonaws`

這些相同名稱區分 Maven 成品，從 SDK 1.x 到 SDK 2.x。SDK 2.x 的 Maven 成品使用 `software.amazon.awssdk` groupId，而 SDK 1.x 使用 `com.amazonaws` groupId。

有些時候，您的程式碼需要對專案的`com.amazonaws`相依性，否則只會使用 SDK 2.x 成品。其中一個範例是當您使用伺服器端時 AWS Lambda。這在本指南稍早的設定 [Apache Maven 專案](setup-project-maven.md#modules-dependencies)區段中顯示。

**注意**  
SDK 1.x 中的數個套件名稱包含 。 `v2``v2` 在此情況下，使用 通常表示套件中的程式碼目標為使用第 2 版的服務。  
由於完整套件名稱以 開頭`com.amazonaws`，因此這些是 SDK 1.x 元件。SDK 1.x 中的這些套件名稱範例如下：  
`com.amazonaws.services.dynamodbv2`
`com.amazonaws.retry.v2`
`com.amazonaws.services.apigatewayv2`
`com.amazonaws.services.simpleemailv2`

## 將 2.x 版新增至您的專案
<a name="adding-v2"></a>

Maven 是使用 適用於 Java 的 AWS SDK 2.x 時管理相依性的建議方法。若要將 2.x 版元件新增至您的專案，請使用 SDK 的相依性更新您的 `pom.xml` 檔案。

**Example**  

```
<dependencyManagement>
    <dependencies>
        <dependency>
          <groupId>software.amazon.awssdk</groupId>
          <artifactId>bom</artifactId>
          <version>2.27.21</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>dynamodb</artifactId>
    </dependency>
</dependencies>
```

您也可以[在將專案遷移至 2.x 版時side-by-side 1.x 版和](migration-side-by-side.md) 2.x 版。

## 不可變 POJO
<a name="immutable-classes"></a>

用戶端和操作要求和回應物件現在不可變，且不可在建立後變更。若要重複使用要求或回應變數，您必須建立新物件，以指派給該要求或回應變數。

**Example 1.x 中更新要求物件的**  

```
DescribeAlarmsRequest request = new DescribeAlarmsRequest();
DescribeAlarmsResult response = cw.describeAlarms(request);

request.setNextToken(response.getNextToken());
```

**Example 2.x 中更新要求物件**  

```
DescribeAlarmsRequest request = DescribeAlarmsRequest.builder().build();
DescribeAlarmsResponse response = cw.describeAlarms(request);

request = DescribeAlarmsRequest.builder()
        .nextToken(response.nextToken())
        .build();
```

## 設定程式和取得程式方法
<a name="setter-getter-methods"></a>

在 適用於 Java 的 AWS SDK 2.x 中，設定程式方法名稱不包含 `set`或 `with`字首。例如， 現在`*.withEndpoint()`是 `*.endpoint()`。

Getter 方法名稱不使用 `get`字首。

**Example 在 1.x 中使用設定器方法的**  

```
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard()
        		.withRegion("us-east-1")
        		.build();
```

**Example 在 2.x 中使用設定器方法的**  

```
DynamoDbClient client = DynamoDbClient.builder()
        		.region(Region.US_EAST_1)
        		.build();
```

**Example 在 1.x 中使用 getter 方法的**  

```
String token = request.getNextToken();
```

**Example 在 2.x 中使用 getter 方法的**  

```
String token = request.nextToken();
```

## 模型類別名稱
<a name="model-classname-changes"></a>

代表服務回應的模型類別名稱以 v2 `Response` 結尾，而不是 v1 `Result` 使用。

**Example 代表 v1 中回應的類別名稱**  

```
CreateApiKeyResult
AllocateAddressResult
```

**Example 代表 v2 中回應的類別名稱**  

```
CreateApiKeyResponse
AllocateAddressResponse
```

## 程式庫和公用程式的遷移狀態
<a name="migration-libraries-utilities"></a>

### 適用於 Java 的 SDK 程式庫和公用程式
<a name="migration-java-sdk-libs-utils"></a>

下表列出適用於 Java 的 SDK 程式庫和公用程式的遷移狀態。


| 1.12.x 版名稱 | 2.x 版名稱 | 自 2.x 版本以來 | 
| --- | --- | --- | 
| DynamoDBMapper | [DynamoDbEnhancedClient](dynamodb-enhanced-client.md) | 2.12.0 | 
| 等待程式 | [等待程式](waiters.md) | 2.15.0 | 
| CloudFrontUrlSigner、CloudFrontCookieSigner | [CloudFrontUtilities](https://aws.amazon.com/blogs/developer/amazon-cloudfront-signed-urls-and-cookies-are-now-supported-in-aws-sdk-for-java-2-x/) | 2.18.33 | 
| TransferManager | [S3TransferManager](transfer-manager.md) | 2.19.0 | 
| EC2 中繼資料用戶端 |  [EC2 中繼資料用戶端](examples-ec2-IMDS.md)  | 2.19.29 | 
| S3 URI 剖析器 |  [S3 URI 剖析器](https://aws.amazon.com/blogs/devops/s3-uri-parsing-is-now-available-in-aws-sdk-for-java-2-x/)  | 2.20.41 | 
| IAM 政策建置器 | [IAM 政策建置器](feature-iam-policy-builder.md) | 2.20.126 | 
| S3 事件通知 | [S3 事件通知](examples-s3-event-notifications.md#s3-event-notification-read) | 2.25.11  | 
| Amazon SQS 用戶端緩衝 | [Amazon SQS 的自動請求批次處理 API](sqs-auto-batch.md) | 2.28.0 | 
| Progress Listeners | Progress Listeners | [尚未發佈](https://github.com/aws/aws-sdk-java-v2/issues/25) | 

### 相關程式庫
<a name="migration-other-sdks"></a>

下表列出個別發行但使用適用於 Java 的 SDK 2.x 的程式庫。


| 與適用於 Java 的 開發套件 2.x 版搭配使用的名稱 | 自版本 | 
| --- | --- | 
|  [Amazon S3 加密用戶端](https://docs.aws.amazon.com/amazon-s3-encryption-client/latest/developerguide/what-is-s3-encryption-client.html)  |  3.0.01  | 
| [AWS 適用於 DynamoDB 的資料庫加密 SDK](https://docs.aws.amazon.com/database-encryption-sdk/latest/devguide/ddb-java.html) | 3.0.02 | 

#### 1Amazon S3 加密用戶端
<a name="migration-s3-encryption-sdk"></a>

您可以使用下列 Maven 相依性來取得 Amazon S3 的加密用戶端。

```
<dependency>
    <groupId>software.amazon.encryption.s3</groupId>
    <artifactId>amazon-s3-encryption-client-java</artifactId>
    <version>{{3.x}}</version>
</dependency>
```

#### 2AWS 適用於 DynamoDB 的資料庫加密 SDK
<a name="migration-ddb-encryption-sdk"></a>

適用於 DynamoDB 的 AWS 資料庫加密 SDK 可用於 V2，方法是使用下列 Maven 相依性。

```
<dependency> 
    <groupId>software.amazon.cryptography</groupId>
    <artifactId>aws-database-encryption-sdk-dynamodb</artifactId>
    <version>{{3.x}}</version>
</dependency>
```

與 Java 開發套件 v1 搭配使用的 DynamoDB 加密程式庫相關資訊，請參閱 [AWS Database Encryption SDK 開發人員指南](https://docs.aws.amazon.com/database-encryption-sdk/latest/devguide/java.html) （名為 *Amazon DynamoDB Encryption Client for Java*) 和 [GitHub](https://github.com/aws/aws-dynamodb-encryption-java)。

如需與 Java 開發套件 V2 相容之 DynamoDB 加密程式庫的詳細資訊，請參閱[AWS 資料庫加密開發套件開發人員指南](https://docs.aws.amazon.com/database-encryption-sdk/latest/devguide/ddb-java.html)和 [GitHub 來源](https://github.com/aws/aws-database-encryption-sdk-dynamodb)。

如需有關加密程式庫的遷移資訊，請參閱 [AWS Database Encryption SDK 開發人員指南](https://docs.aws.amazon.com/database-encryption-sdk/latest/devguide/ddb-java-migrate.html)。

### 程式庫和公用程式的遷移詳細資訊
<a name="migrate-libs-utils-details"></a>
+ [Transfer Manager](migration-s3-transfer-manager.md)
+ [EC2 中繼資料公用程式](migration-imds.md)
+ [CloudFront 預先簽署](migration-cloudfront-presigning.md)
+ [S3 URI 剖析](migration-s3-uri-parser.md)
+ [DynamoDB 映射/文件 APIs](migration-ddb-mapper.md) 
+ [IAM 政策建置器](migration-iam-policy-builder.md)
+ [S3 事件通知](migration-s3-event-notification.md)
+ SDK 指標發佈 ([1.x 文件](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/generating-sdk-metrics.html)、[2.x 文件](metrics.md))