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

DynamoDB 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.path mancante — il download include le librerie native in DynamoDBLocal_lib/, e il comando di avvio documentato deve indirizzare la JVM lì. Eseguire java -jar DynamoDBLocal.jar nudo (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 copiajest-dynamodb, serverless-dynamodb-local e 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

  1. Avvialo nel modo documentato, dalla cartella estratta:

    java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
  2. Aggiorna 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.

  3. 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-local
  4. Su 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.dylib con la build ARM64 di sqlite4java pubblicata dalla community.

  5. Via di fuga in memoria: -inMemory richiede 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

References

Ultima verifica 2026-07-13 rispetto alla documentazione ufficiale AWS collegata sopra.

Lavora con DynamoDB senza la Console

DynoTable è un client desktop veloce per DynamoDB — sfoglia le tabelle, esegui query in stile SQL e modifica gli Item localmente.