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.0

Die 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-java ist noch 8 oder 11 — häufig auf älteren CI-Images und Maschinen, wo vor Jahren ein LTS-JDK installiert wurde.
  • JAVA_HOME/PATH zeigen 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

  1. Prüfe, was tatsächlich läuft:

    java -version
  2. Installiere 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 -sharedDb
  3. Oder lass die lokale Java-Anforderung fallen — das Docker-Image liefert eine kompatible Runtime mit:

    docker run -p 8000:8000 amazon/dynamodb-local
  4. Aktualisiere 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

Quellen

Mit DynamoDB ohne die Console arbeiten

Ein schneller DynamoDB-Desktop-Client, der das echte SQL ausführt, das DynamoDB nicht kann — JOINs, GROUP BY, Aggregationen — mit visueller Bearbeitung und einem KI-Agenten auf deinen eigenen Bedrock-Schlüsseln.

30 Tage kostenlos testen, keine Kreditkarte — danach der Kostenlos-Tarif ohne Zeitlimit.