DynamoDB Local: Failed to load native library sqlite4java

En bref — Le moteur de stockage de DynamoDB Local charge une bibliothèque native (sqlite4java) au démarrage, et la JVM ne peut soit pas la trouver, soit pas l'exécuter. Deux causes classiques : tu as lancé le jar sans -Djava.library.path=./DynamoDBLocal_lib, ou tu es sur un Mac Apple Silicon et le binaire fourni est pour x86_64. Pointe la JVM vers le dossier de bibliothèques natives, mets à jour vers un DynamoDB Local actuel, ou lance l'image Docker multi-arch.

Ce que ça signifie

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 est une application Java dont le stockage sur disque est soutenu par une bibliothèque native (par OS, par architecture). UnsatisfiedLinkError est la JVM qui dit qu'elle n'a pas pu lier ce binaire — soit il n'est pas du tout sur le chemin des bibliothèques, soit le fichier existe mais a été compilé pour un OS/CPU différent de ta JVM. L'émulateur ne peut pas démarrer sans lui.

Pourquoi ça arrive

  • -Djava.library.path manquant — le téléchargement livre les natives dans DynamoDBLocal_lib/, et la commande de lancement documentée doit y pointer la JVM. Exécuter java -jar DynamoDBLocal.jar nu (ou depuis un répertoire de travail différent) les perd.
  • Apple Silicon (série M) + une native x86_64 — les builds et wrappers plus anciens de DynamoDB Local n'embarquent que des binaires Intel libsqlite4java-osx ; une JVM ARM64 refuse de les charger (« no matching architecture »).
  • Un wrapper qui épingle une vieille copiejest-dynamodb, serverless-dynamodb-local et des outils similaires téléchargent leur propre DynamoDB Local ; une ancienne version en cache garde les natives périmées même après une « mise à jour ».
  • Natives extraites dans un dossier temp qui a été nettoyé — certaines configurations décompressent dans un dossier temp que l'OS efface, donc ça marche jusqu'au redémarrage.

Comment corriger

  1. Lance-le de la manière documentée, depuis le dossier extrait :

    java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
  2. Mets à jour DynamoDB Local — télécharge la version actuelle ; les builds plus récents résolvent la situation Apple Silicon qui affligeait les anciens. Si un wrapper gère l'installation, vide son cache/réinstalle pour qu'il récupère réellement la nouvelle version.

  3. Ou contourne entièrement les natives avec Docker — l'image amazon/dynamodb-local est le chemin le moins fragile et tourne sur Apple Silicon :

    docker run -p 8000:8000 amazon/dynamodb-local
  4. Sur Apple Silicon avec un ancien build que tu ne peux pas changer : exécute un JDK x86_64 sous Rosetta 2 (les natives Intel correspondent alors à la JVM), ou remplace libsqlite4java-osx.dylib par le build ARM64 de sqlite4java publié par la communauté.

  5. Échappatoire en mémoire : -inMemory a toujours besoin de la bibliothèque dans les builds actuels — ce n'est pas un contournement pour une native manquante ; corrige plutôt le chemin/l'architecture.

Une fois l'émulateur actif, pointe tes outils dessus — l'application de bureau DynoTable se connecte à DynamoDB Local à http://localhost:8000 pour que tu puisses créer des tables et inspecter les données sans écrire de script. Utilise le convertisseur DynamoDB JSON pour préparer des éléments de départ au format wire.

Erreurs liées

Références

Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.

Travaille avec DynamoDB sans la Console

DynoTable est un client de bureau rapide pour DynamoDB — parcours les tables, exécute des requêtes de style SQL et édite les items en local.