DynamoDB Local: Failed to load native library sqlite4java

TL;DR — Die Storage-Engine von DynamoDB Local lädt beim Start eine native Bibliothek (sqlite4java), und die JVM kann sie entweder nicht finden oder nicht ausführen. Zwei klassische Ursachen: Du hast das Jar ohne -Djava.library.path=./DynamoDBLocal_lib gestartet, oder du bist auf einem Apple-Silicon-Mac und die mitgelieferte Binary ist für x86_64. Richte die JVM auf den Native-Lib-Ordner aus, aktualisiere auf ein aktuelles DynamoDB Local, oder führe das Multi-Arch-Docker-Image aus.

Was es bedeutet

Failed to load native library:'libsqlite4java-osx-1.0.392.dylib'. ...
java.lang.UnsatisfiedLinkError: no sqlite4java-osx-x86_64-1.0.392 in java.library.path

DynamoDB Local ist eine Java-Anwendung, deren On-Disk-Speicher von einer nativen (pro OS, pro Architektur) Bibliothek gestützt wird. UnsatisfiedLinkError ist die JVM, die sagt, dass sie diese Binary nicht linken konnte — entweder ist sie überhaupt nicht auf dem Library-Path, oder die Datei existiert, wurde aber für eine andere OS-/CPU-Architektur als deine JVM gebaut. Der Emulator kann ohne sie nicht starten.

Warum es passiert

  • Fehlendes -Djava.library.path — der Download liefert die Natives in DynamoDBLocal_lib/, und der dokumentierte Startbefehl muss die JVM dorthin richten. java -jar DynamoDBLocal.jar blank (oder aus einem anderen Arbeitsverzeichnis) auszuführen, verliert sie.
  • Apple Silicon (M-Serie) + ein x86_64-Native — ältere DynamoDB-Local-Builds und Wrapper bündeln nur Intel-libsqlite4java-osx-Binaries; eine ARM64-JVM weigert sich, sie zu laden ("no matching architecture").
  • Ein Wrapper, der eine alte Kopie festhältjest-dynamodb, serverless-dynamodb-local und ähnliche Tools laden ihr eigenes DynamoDB Local herunter; eine gecachte alte Version behält die veralteten Natives auch nach einem „Update".
  • Natives in ein Temp-Verzeichnis entpackt, das aufgeräumt wurde — manche Setups entpacken in einen Temp-Ordner, den das OS leert, sodass es bis zum Neustart funktioniert.

So behebst du es

  1. Starte es auf die dokumentierte Weise, aus dem entpackten Ordner:

    java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
  2. Aktualisiere DynamoDB Local — lade das aktuelle Release herunter; neuere Builds lösen die Apple-Silicon-Situation, die ältere plagte. Wenn ein Wrapper die Installation verwaltet, leere seinen Cache/installiere neu, sodass er die neue Version tatsächlich holt.

  3. Oder umgehe Natives ganz mit Docker — das amazon/dynamodb-local-Image ist der am wenigsten fragile Weg und läuft auf Apple Silicon:

    docker run -p 8000:8000 amazon/dynamodb-local
  4. Auf Apple Silicon mit einem alten Build, den du nicht ändern kannst: führe ein x86_64-JDK unter Rosetta 2 aus (die Intel-Natives passen dann zur JVM), oder ersetze libsqlite4java-osx.dylib durch den Community-veröffentlichten ARM64-Build von sqlite4java.

  5. In-Memory-Notausgang: -inMemory braucht die Bibliothek in aktuellen Builds trotzdem — es ist kein Workaround für ein fehlendes Native; behebe stattdessen Path/Arch.

Sobald der Emulator oben ist, richte deine Tools darauf aus — die DynoTable-Desktop-App verbindet sich mit DynamoDB Local unter http://localhost:8000, sodass du Tabellen erstellen und Daten inspizieren kannst, ohne ein Skript zu schreiben. Nutze den DynamoDB-JSON-Konverter, um Seed-Items im Wire-Format vorzubereiten.

Verwandte Fehler

References

Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.

Mit DynamoDB ohne die Console arbeiten

DynoTable ist ein schneller Desktop-Client für DynamoDB — durchsuche Tabellen, führe SQL-artige Queries aus und bearbeite Items lokal.