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.pathDynamoDB 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 inDynamoDBLocal_lib/, und der dokumentierte Startbefehl muss die JVM dorthin richten.java -jar DynamoDBLocal.jarblank (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ält —
jest-dynamodb,serverless-dynamodb-localund ä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
Starte es auf die dokumentierte Weise, aus dem entpackten Ordner:
java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDbAktualisiere 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.
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-localAuf 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.dylibdurch den Community-veröffentlichten ARM64-Build von sqlite4java.In-Memory-Notausgang:
-inMemorybraucht 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
- Unable to start DynamoDB Local process — der übergeordnete Startfehler, in dem sich dieser oft versteckt.
- DynamoDB Local port 8000 in use
- Could not connect to DynamoDB Local
- Learn: Running DynamoDB Local
References
- Deploying DynamoDB locally on your computer — AWS DynamoDB Developer Guide (the documented
java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jarlaunch command) - DynamoDB local usage notes — AWS DynamoDB Developer Guide (
-sharedDb,-inMemoryand the other runtime options) - amazon/dynamodb-local — Docker Hub (official multi-architecture image — amd64 + arm64, so it runs natively on Apple Silicon)
Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.