DynamoDB Lokal: UnsupportedClassVersionError

TL;DR — Runtime Java Anda lebih lama dari waktu kompilasi DynamoDB Lokal. DynamoDB Lokal saat ini (v2.6.0 dan yang lebih baru, termasuk v3.x) memerlukan JRE 17+ — meluncurkannya di Java 8/11 membuat JVM menolak file kelas dengan UnsupportedClassVersionError. Instal runtime Java 17+ (Temurin, Corretto,…) dan jalankan kembali, atau lewati Java lokal sepenuhnya dengan image Docker amazon/dynamodb-local.

Apa artinya

Error: A JNI error has occurred...
java.lang.UnsupportedClassVersionError: com/amazonaws/services/dynamodbv2/local/main/ServerRunner
has been compiled by a more recent version of the Java Runtime
(class file version 61.0), this version of the Java Runtime only
recognizes class file versions up to 52.0

sebelum DynamoDB Lokal mengikat port. Versi file kelas 61 adalah Java 17, 52 adalah Java 8 — bytecode toples menargetkan JVM yang lebih baru daripada java di PATH, sehingga JVM dibatalkan sebelum DynamoDB Lokal menjalankan satu baris. AWS mendokumentasikan lantai secara eksplisit: v2.6.0+ tidak berjalan di JRE yang lebih lama dari 17.

Mengapa itu terjadi

  • Sistem java masih 8 atau 11 — umum pada image dan mesin CI lama yang memasang LTS JDK bertahun-tahun yang lalu.
  • Titik JAVA_HOME/PATH di JDK lama — JDK yang lebih baru telah diinstal, namun shell akan menyelesaikan JDK lama terlebih dahulu.
  • Peningkatan DynamoDB Lokal melampaui persyaratan — toples 1.x dijalankan pada Java 8; menggantinya dengan 2.x/3.x secara diam-diam menaikkan standar menjadi 17.
  • Alat build menyematkan rantai alat — Maven/Gradle yang dikonfigurasi dengan rantai alat lama meluncurkan DynamoDB Lokal yang tertanam di bawahnya.

Ketika beberapa JDK diinstal, which java dan echo $JAVA_HOME sering kali tidak setuju — plugin mungkin memanggil skrip pembungkus yang masih tetap menggunakan Java 11 bahkan setelahnya Anda menginstal 17 di tempat lain di PATH.

Gambar CI yang disematkan ke eclipse-temurin:11 sering menjadi sumber — gambarnya bertabrakan tag ke 17 sebelum langkah Lokal DynamoDB di saluran Anda.

Bagaimana cara memperbaikinya

  1. Periksa apa yang sebenarnya berjalan:

    java -version
  2. Instal runtime Java 17+ (distribusi apa pun — Eclipse Temurin, Amazon Corretto, dll.) dan arahkan shell Anda ke sana:

    export JAVA_HOME=/path/to/jdk-17
    export PATH="$JAVA_HOME/bin:$PATH"
    java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
  3. Atau hilangkan persyaratan Java lokal — image Docker mengirimkan runtime yang kompatibel:

    docker run -p 8000:8000 amazon/dynamodb-local
  4. Perbarui gambar CI dan rantai alat — sematkan Java 17+ di mana pun DynamoDB Lokal dimulai (runner pengujian, rantai alat Maven/Gradle), sehingga kesalahan tidak muncul kembali di setiap mesin.

Temukan di DynoTable

Lewati JRE lokal sepenuhnya: jalankan docker run -p 8000:8000 amazon/dynamodb-local, instal DynoTable, dan tambahkan profil Lokal di Pengaturan → Profil → Tambahkan Profil dengan titik akhir http://localhost:8000. Uji Koneksi konfirmasi Lokal sudah habis sebelum Anda membuka tabel. Setelah boot, itu DynamoDB Expression Builder membuat draf kueri Anda dapat melawan emulator.

Kesalahan terkait

Sumber

Bekerja dengan DynamoDB tanpa Console

Klien desktop DynamoDB yang cepat dan menjalankan SQL sungguhan yang tidak bisa dijalankan DynamoDB — JOINs, GROUP BY, agregasi — dengan editing visual dan agen AI pada kunci Bedrock milik Anda sendiri.

Uji coba gratis 30 hari, tanpa kartu kredit — lalu paket Free tanpa batas waktu.