DynamoDB Local: Failed to load native library sqlite4java
In breve — Il motore di storage di DynamoDB Local carica una libreria nativa (sqlite4java) all'avvio, e la JVM o non riesce a trovarla o non riesce a eseguirla. Due cause classiche: hai avviato il jar senza -Djava.library.path=./DynamoDBLocal_lib, oppure sei su un Mac Apple Silicon e il binario incluso è per x86_64. Indirizza la JVM alla cartella delle librerie native, aggiorna a un DynamoDB Local attuale, o esegui l'immagine Docker multi-arch.
Cosa significa
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 è un'applicazione Java il cui storage su disco è supportato da una libreria nativa (per-OS, per-architettura). UnsatisfiedLinkError è la JVM che dice di non essere riuscita a collegare quel binario — o non è affatto sul library path, oppure il file esiste ma è stato compilato per un OS/CPU diverso dalla tua JVM. L'emulatore non può avviarsi senza di esso.
Perché accade
-Djava.library.pathmancante — il download include le librerie native inDynamoDBLocal_lib/, e il comando di avvio documentato deve indirizzare la JVM lì. Eseguirejava -jar DynamoDBLocal.jarnudo (o da una working directory diversa) le perde.- Apple Silicon (serie M) + una nativa x86_64 — le build e i wrapper più vecchi di DynamoDB Local includono solo binari Intel
libsqlite4java-osx; una JVM ARM64 si rifiuta di caricarli ("no matching architecture"). - Un wrapper che fissa una vecchia copia —
jest-dynamodb,serverless-dynamodb-locale strumenti simili scaricano il proprio DynamoDB Local; una vecchia versione in cache mantiene le librerie native obsolete anche dopo che "aggiorni". - Librerie native estratte in una dir temporanea ripulita — alcuni setup le estraggono in una cartella temporanea che l'OS svuota, quindi funziona fino al riavvio.
Come correggerlo
Avvialo nel modo documentato, dalla cartella estratta:
java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDbAggiorna DynamoDB Local — scarica la release attuale; le build più recenti risolvono la situazione Apple Silicon che affliggeva quelle vecchie. Se un wrapper gestisce l'installazione, svuota la sua cache/reinstalla così scarica davvero la nuova versione.
Oppure evita del tutto le librerie native con Docker — l'immagine
amazon/dynamodb-localè il percorso meno fragile e gira su Apple Silicon:docker run -p 8000:8000 amazon/dynamodb-localSu Apple Silicon con una vecchia build che non puoi cambiare: esegui un JDK x86_64 sotto Rosetta 2 (le librerie native Intel corrispondono allora alla JVM), oppure sostituisci
libsqlite4java-osx.dylibcon la build ARM64 di sqlite4java pubblicata dalla community.Via di fuga in memoria:
-inMemoryrichiede comunque la libreria nelle build attuali — non è un workaround per una nativa mancante; correggi invece il path/architettura.
Una volta avviato l'emulatore, punta i tuoi strumenti su di esso — l'app desktop DynoTable si connette a DynamoDB Local su http://localhost:8000 così puoi creare tabelle e ispezionare i dati senza scrivere uno script. Usa il convertitore DynamoDB JSON per preparare Item di seed nel formato wire.
Errori correlati
- Unable to start DynamoDB Local process — il fallimento di avvio generale dietro cui questo spesso si nasconde.
- DynamoDB Local port 8000 in use
- Could not connect to DynamoDB Local
- Impara: 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)
Ultima verifica 2026-07-13 rispetto alla documentazione ufficiale AWS collegata sopra.