2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【エラー解消】AWS SDK for KotlinのS3Client.putObjectで発生したNoClassDefFoundError

Last updated at Posted at 2024-11-11

前提

環境
OS Mac(M1)
Language Kotlin
IDE IntelliJ IDEA 2024.1.1 (Community Edition)
SDK corretto-21(Amazon Corretto 21.0.3 - aarch64)
aws.sdk.kotlin:s3 1.3.67

事象

AWS SDK for KotlinのDeveloper GuideS3Client.putObjectsサンプルコードを参考に実装を行なったところ、下記エラーが発生した。

Caused by: java.lang.NoClassDefFoundError: okhttp3/ConnectionListener

解消できた方法

S3ClientのhttpClientに対してCrtHttpEngineを設定する。

//build.gradle.ktsに下記を追加
implementation("aws.smithy.kotlin:http-client-engine-crt:1.3.20")
suspend fun putS3Object(
    bucketName: String,
    objectKey: String,
    objectPath: String,
) {
    val request =
        PutObjectRequest {
            bucket = bucketName
            key = objectKey
            body = File(objectPath).asByteStream()
        }

  	CrtHttpEngine().use { engine ->
        S3Client {
          region = "us-east-1"
          httpClient = engine //<-CrtHttpEngineを使用するよう指定
        }.use { s3 ->
            val response = s3.putObject(request)
            println("Tag information is ${response.eTag}")
        }                
    }
}

解消できなかった方法

  • aws.sdk.kotlin:s3を最新バージョン(1.3.69)に変更する
  • デフォルトのOkHttpEngineが使用できない場合の案内リンク先に従い、S3ClientのhttpClientにOkHttp4Engineを設定する
  • 依存関係にcom.squareup.okhttp3:okhttp:4.12.0を追加する
  • resolutionStrategyでcom.squareup.okhttp3:okhttp:4.12.0に統一する
  • 依存関係にcom.squareup.okhttp3:okhttp:5.0.0-alpha.12(alphaだけど安定版の案内あり)を追加する
  • 依存関係にcom.squareup.okhttp3:okhttp:5.0.0-alpha.11(安定版のひとつ前)を追加する
  • 依存関係にcom.squareup.okhttp3:okhttp:5.0.0-alpha.14(最新版)を追加する

TIPS(ChatGPT利用)

httpClient

HTTP通信を行うためのエンジンを指定するプロパティ。

OkHttpEngine

概要

高速で効率的なHTTPクライアントライブラリ。

特徴

  • HTTP/1.1、HTTP/2、及びWebSocketサポート
  • 接続プールや自動リトライ、接続管理など、高度な機能が提供される
  • セッションの管理(クッキー、リダイレクト、キャッシュ)など、標準的なHTTP通信のための多数の機能
  • Android向けでよく使われる

OkHttp4Engine

概要

OkHttpライブラリのバージョン4.xを使用するエンジン。

特徴

  • 非同期処理をより強力にサポート
  • Kotlinに対応したコルーチンベースの非同期処理(suspend関数等)を利用可能
  • HTTP/2、HTTP/3のサポート(特にHTTP/3は4.xからの新機能)
  • セキュリティの向上(TLS 1.3、HTTP/2の強化など)
  • APIがシンプルで、以前のバージョンよりも直感的に使いやすい

CrtHttpEngine

概要

AWSの Crt(Common Runtime)ライブラリに基づくHTTPクライアントエンジン。AWS Crtライブラリのネットワークスタックを利用するため、高性能なHTTP通信を提供してくれる。C/C++で書かれた低レベルのコードが含まれており、効率を重視するシナリオで使用される。

特徴

  • 高いパフォーマンスと低レイテンシを提供
  • AWS SDKやIoTデバイスとの統合で特に効果を発揮
  • 設定が豊富で、トラフィック管理やトラフィック制限、接続管理が細かく制御できる
  • デバイス向けに最適化された設計(IoTなど)
  • HTTP/1.1、HTTP/2に加えて、TLS接続が非常に強化されている
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?