DynamoDB Local: UnsupportedClassVersionError
TL;DR — Deine Java-Runtime ist älter als die, für die DynamoDB Local kompiliert wurde. Aktuelles DynamoDB Local (v2.6.0 und neuer, inklusive v3.x) verlangt JRE 17+ — startest du es auf Java 8/11, verweigert die JVM die Klassendateien mit UnsupportedClassVersionError. Installiere eine Java-17+-Runtime (Temurin, Corretto, …) und starte neu, oder überspring lokales Java ganz und nimm das Docker-Image amazon/dynamodb-local.
Was es bedeutet
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.0Die Zahlen dekodieren die Diskrepanz: Class-File-Version 61 ist Java 17, 52 ist Java 8. Der Bytecode des Jars zielt auf eine neuere JVM als das java auf deinem PATH, sodass die JVM abbricht, bevor DynamoDB Local eine einzige Zeile ausführt. AWS dokumentiert die Untergrenze explizit: v2.6.0+ läuft nicht auf JREs älter als 17.
Warum es passiert
- Das System-
javaist noch 8 oder 11 — häufig auf älteren CI-Images und Maschinen, wo vor Jahren ein LTS-JDK installiert wurde. JAVA_HOME/PATHzeigen auf das alte JDK — ein neueres JDK ist installiert, aber die Shell löst zuerst das Legacy-JDK auf.- Ein Upgrade von DynamoDB Local hat die Anforderung überschritten — die 1.x-Jars liefen auf Java 8; sie durch 2.x/3.x zu ersetzen, hat die Latte stillschweigend auf 17 gehoben.
- Ein Build-Tool fixiert die Toolchain — Maven/Gradle, mit einer alten Toolchain konfiguriert, startet das eingebettete DynamoDB Local darunter.
So behebst du es
Prüfe, was tatsächlich läuft:
java -versionInstalliere eine Java-17+-Runtime (jede Distribution — Eclipse Temurin, Amazon Corretto usw.) und richte deine Shell darauf aus:
export JAVA_HOME=/path/to/jdk-17 export PATH="$JAVA_HOME/bin:$PATH" java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDbOder lass die lokale Java-Anforderung fallen — das Docker-Image liefert eine kompatible Runtime mit:
docker run -p 8000:8000 amazon/dynamodb-localAktualisiere CI-Images und Toolchains — fixiere Java 17+ überall, wo DynamoDB Local startet (Test-Runner, Maven-/Gradle-Toolchains), sodass der Fehler nicht pro Maschine wieder auftaucht.
Sobald es auf Port 8000 bootet, richte dein Tooling auf http://localhost:8000 — die DynoTable-Desktop-App verbindet sich mit DynamoDB Local als First-Class-Endpoint, und der DynamoDB Expression Builder entwirft die Abfragen, die du dagegen ausführst.
In DynoTable erkennen
Überspring die lokale JRE ganz: Starte docker run -p 8000:8000 amazon/dynamodb-local,
installiere DynoTable und füge unter Einstellungen → Profile →
Profil hinzufügen ein Local-Profil mit dem Endpunkt http://localhost:8000 hinzu.
Verbindung testen bestätigt, dass Local läuft, bevor du Tabellen öffnest. Sobald es
gebootet ist, entwirft der
DynamoDB Expression Builder die Queries, die du
gegen den Emulator laufen lässt.
Verwandte Fehler
- DynamoDB Local: unable to start process — andere Startfehler, sobald Java selbst stimmt.
- DynamoDB Local: sqlite4java errors — das Native-Library-Geschwister.
- DynamoDB Local: Port 8000 belegt
- Learn: DynamoDB Local
Quellen
- Deploying DynamoDB locally on your computer — AWS DynamoDB Developer Guide (the JRE 17+ requirement for v2.6.0+, launch command, version listing)
- DynamoDB local usage notes — AWS DynamoDB Developer Guide (
-sharedDband the other runtime options) - amazon/dynamodb-local — Docker Hub (official image bundles a compatible Java runtime)