

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 依存関係の競合を解決するにはどうすればよいですか?
<a name="ts-faq-dep-conflict-resolution"></a>

を使用する場合は AWS SDK for Kotlin、特定の AWS およびサードパーティーの依存関係が正しく動作する必要があります。これらの依存関係が実行時に欠落している、または予期しないバージョンがある場合、 `NoSuchMethodError`や などのエラーが表示されることがあります`NoClassDefFoundError`。これらの依存関係の問題は、通常 2 つのグループに分類されます。
+ SDK/Smithy 依存関係の競合
+ サードパーティーの依存関係の競合

Kotlin アプリケーションを構築するときは、Gradle を使用して依存関係を管理する可能性があります。SDK サービスクライアントへの依存関係をプロジェクトに追加すると、関連するすべての依存関係が自動的に含まれます。ただし、アプリケーションに他の依存関係がある場合、SDK で必要な依存関係と競合する可能性があります。例えば、SDK は、アプリケーションが使用する一般的な HTTP クライアントである OkHttp に依存しています。これらの競合を見つけるために、Gradle はプロジェクトの依存関係を一覧表示する便利なタスクを提供します。

```
./gradlew dependencies
```

依存関係の競合が発生した場合は、アクションを実行する必要がある場合があります。特定のバージョンの依存関係またはシャドウ依存関係をローカル名前空間に指定できます。Gradle 依存関係の解決は、*Gradle ユーザーマニュアル*の以下のセクションで説明する複雑なトピックです。
+ [ 依存関係の解決について ](https://docs.gradle.org/current/userguide/dependency_resolution.html)
+ [ 依存関係の制約と競合の解決 ](https://docs.gradle.org/current/userguide/dependency_constraints_conflicts.html)
+ [ 依存関係バージョンの調整 ](https://docs.gradle.org/current/userguide/dependency_version_alignment.html)

## プロジェクトの SDK と Smithy の依存関係の管理
<a name="sdk-smithy-dep-conflicts"></a>

SDK を使用する場合は、そのモジュールは通常、バージョン番号が一致する他の SDK モジュールに依存することに注意してください。たとえば、 `aws.sdk.kotlin:s3:1.2.3`は に依存し`ws.sdk.kotlin:aws-http:1.2.3`、 は に依存し`aws.sdk.kotlin:aws-core:1.2.3`ます。

SDK モジュールは、特定の Smithy モジュールバージョンも使用します。Smithy モジュールバージョンは SDK バージョン番号と同期しませんが、SDK の想定バージョンと一致する必要があります。たとえば、 `aws.sdk.kotlin:s3:1.2.3`は に依存し`aws.smithy.kotlin:serde:1.1.1`、 は に依存し`aws.smithy.kotlin:runtime-core:1.1.1`ます。

依存関係の競合を回避するには、すべての SDK 依存関係を一緒にアップグレードし、明示的な Smithy 依存関係に対して同じ操作を行います。[Gradle バージョンカタログ](setup-create-project-file.md)を使用してバージョンを同期させ、SDK と Smithy バージョン間のマッピングにおける推測を排除することを検討してください。

SDK/Smithy モジュールのマイナーバージョン更新には、[バージョニングポリシー](https://github.com/awslabs/aws-sdk-kotlin/blob/main/VERSIONING.md#versioning-policy)で説明されているように、重大な変更が含まれる場合があることに注意してください。マイナーバージョン間でアップグレードする場合は、変更ログを慎重に確認し、ランタイム動作を徹底的にテストしてください。

## アプリケーションでの OkHttp バージョンの競合の解決
<a name="okhttp-dep-conflicts"></a>

[OkHttp](https://square.github.io/okhttp/) は、SDK が JVM でデフォルトで使用する一般的な HTTP エンジンです。アプリケーションには、別の OkHttp バージョンを取り込む他の依存関係やフレームワークが含まれる場合があります。これにより、 `okhttp/coroutines/ExecuteAsyncKt` や など、`okhttp3`名前空間内の`NoClassDefFoundError`クラスの が発生する可能性があります`okhttp3/ConnectionListener`。この場合、通常、新しいバージョンを選択して競合を解決する必要があります。これらの競合の原因を追跡しやすくするために、Gradle には便利なタスクが用意されています。以下を実行して、すべての依存関係を一覧表示できます。

```
./gradlew dependencies
```

たとえば、SDK が OkHttp に依存し`5.0.0-alpha.14`、Spring Boot などの別の依存関係が OkHttp に依存している場合は`4.12.0`、 を使用する必要があります`5.0.0-alpha.14 version`。これを行うには、Gradle の `constraints`ブロックを使用します。

```
dependencies {
    constraints {
        implementation("com.squareup.okhttp3:okhttp:4.12.0")
    }
}
```

または、OkHttp 4.x を使用する必要がある場合、SDK は を提供します`OkHttp4Engine`。Gradle を設定してコード`OkHttp4Engine`で使用する方法については、 [ドキュメント](https://github.com/smithy-lang/smithy-kotlin/tree/main/runtime/protocol/http-client-engines/http-client-engine-okhttp4)を参照してください。