DynamoDB Locale "Failed to load native library sqlite4java": impossibile caricare la libreria nativa sqlite4java

TL;DR — DynamoDB Il motore di archiviazione locale carica una libreria nativa (sqlite4java) all'avvio e la JVM 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 file binario in bundle è per x86_64. Punta la JVM nella cartella native-lib, aggiorna a una DynamoDB Local corrente 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
# Unable to start DynamoDB Localnative library load failure

DynamoDB Local è un'applicazione Java la cui archiviazione su disco è supportata da una libreria nativa (per sistema operativo, per architettura). "UnsatisfiedLinkError" è la JVM che dice che non è possibile collegare quel file binario: o non si trova affatto nel percorso della libreria oppure il file esiste ma è stato creato per un'architettura sistema operativo/CPU diversa rispetto alla tua JVM. L'emulatore non può avviarsi senza di esso.

Perché succede

  • Mancante -Djava.library.path: il download spedisce i nativi in DynamoDBLocal_lib/ e il comando di avvio documentato deve puntare la JVM lì. L'esecuzione di java -jar DynamoDBLocal.jar bare (o da una directory di lavoro diversa) li perde.
  • Apple Silicon (serie M) + x86_64 nativo: build e wrapper locali DynamoDB precedenti raggruppano solo i binari Intel libsqlite4java-osx; una JVM ARM64 si rifiuta di caricarli ("nessuna architettura corrispondente").
  • Un wrapper che blocca una vecchia copiajest-dynamodb, serverless-dynamodb-local e strumenti simili scaricano il proprio DynamoDB Local; una vecchia versione memorizzata nella cache mantiene i nativi obsoleti anche dopo l'"aggiornamento".
  • Nativi estratti in una directory temporanea che è stata pulita: alcune configurazioni vengono decompresse in una cartella temporanea che il sistema operativo cancella, quindi funziona fino al riavvio.

Come risolverlo

  1. Avvialo in modo documentato, dalla cartella estratta:

    java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
  2. Aggiornamento DynamoDB Locale: scarica la versione corrente; le build più recenti risolvono la situazione del silicio Apple che affliggeva quelle più vecchie. Se un wrapper gestisce l'installazione, svuota la cache/reinstalla in modo che recuperi effettivamente la nuova versione.

  3. Oppure eludi completamente i nativi con Docker: l'immagine amazon/dynamodb-local è il percorso meno fragile e funziona su Apple Silicon:

    docker run -p 8000:8000 amazon/dynamodb-local
  4. Su Apple Silicon con una vecchia build non è possibile modificare: esegui un x86_64 JDK sotto Rosetta 2 (i nativi Intel corrispondono quindi alla JVM) o sostituisci libsqlite4java-osx.dylib con la build ARM64 di sqlite4java pubblicata dalla comunità.

  5. Porta di fuga in memoria: -inMemory necessita ancora della libreria nelle build attuali: non è una soluzione alternativa per un nativo mancante; correggi invece il percorso/arco.

Aprilo in DynoTable

Una volta avviato Local, connettiti da DynoTable — Impostazioni → Profili → endpoint http://localhost:8000, qualsiasi stringa della regione, credenziali fittizie, quindi Test connessione. Apri tabelle con seeding con ⌘K senza scrivere uno script di connettività.

Prepara i dati seed con il convertitore JSON. Consulta Installa e Connetti a AWS per il percorso completo di configurazione locale.

Fonti

Errori correlati

Riferimenti

Lavora con DynamoDB senza la Console

Un client desktop veloce per DynamoDB che esegue il vero SQL che DynamoDB non può — JOINs, GROUP BY, aggregazioni — con modifica visuale e un agente AI sulle tue chiavi Bedrock.

Prova gratuita di 30 giorni, senza carta di credito — poi il piano Free senza limiti di tempo.