DynamoDB Local: Failed to load native library sqlite4java
TL;DR — El motor de almacenamiento de DynamoDB Local carga una biblioteca nativa (sqlite4java) al arrancar, y la JVM o no la encuentra o no puede ejecutarla. Dos causas clásicas: lanzaste el jar sin -Djava.library.path=./DynamoDBLocal_lib, o estás en un Mac con Apple Silicon y el binario incluido es para x86_64. Apunta la JVM a la carpeta de bibliotecas nativas, actualiza a una versión reciente de DynamoDB Local, o ejecuta la imagen Docker multiarquitectura.
Qué 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 es una aplicación Java cuyo almacenamiento en disco se apoya en una biblioteca nativa (por SO, por arquitectura). UnsatisfiedLinkError es la JVM diciéndote que no pudo enlazar ese binario — o no está en la ruta de bibliotecas en absoluto, o el archivo existe pero se compiló para un SO/CPU distinto al de tu JVM. El emulador no puede arrancar sin él.
Por qué ocurre
- Falta
-Djava.library.path— la descarga incluye las bibliotecas nativas enDynamoDBLocal_lib/, y el comando de lanzamiento documentado debe apuntar la JVM ahí. Ejecutarjava -jar DynamoDBLocal.jara secas (o desde otro directorio de trabajo) las pierde. - Apple Silicon (serie M) + una nativa x86_64 — las versiones y wrappers antiguos de DynamoDB Local incluyen solo binarios Intel
libsqlite4java-osx; una JVM ARM64 se niega a cargarlos ("no matching architecture"). - Un wrapper anclado a una copia antigua —
jest-dynamodb,serverless-dynamodb-localy herramientas similares descargan su propio DynamoDB Local; una versión antigua en caché mantiene las nativas obsoletas incluso después de "actualizar". - Nativas extraídas a un directorio temporal que se limpió — algunas configuraciones descomprimen en una carpeta temporal que el SO borra, así que funciona hasta el reinicio.
Cómo solucionarlo
Láncalo de la forma documentada, desde la carpeta extraída:
java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDbActualiza DynamoDB Local — descarga la versión actual; las versiones nuevas resuelven la situación de Apple Silicon que afectaba a las antiguas. Si un wrapper gestiona la instalación, limpia su caché/reinstala para que realmente descargue la nueva versión.
O evita las nativas por completo con Docker — la imagen
amazon/dynamodb-locales el camino menos frágil y funciona en Apple Silicon:docker run -p 8000:8000 amazon/dynamodb-localEn Apple Silicon con una versión antigua que no puedes cambiar: ejecuta un JDK x86_64 bajo Rosetta 2 (las nativas Intel entonces coinciden con la JVM), o reemplaza
libsqlite4java-osx.dylibcon la versión ARM64 de sqlite4java publicada por la comunidad.Salida de emergencia en memoria:
-inMemorysigue necesitando la biblioteca en las versiones actuales — no es un rodeo para una nativa que falta; arregla la ruta/arquitectura en su lugar.
Una vez que el emulador esté en marcha, apunta tus herramientas a él — la aplicación de escritorio DynoTable se conecta a DynamoDB Local en http://localhost:8000 para que puedas crear tablas e inspeccionar datos sin escribir un script. Usa el conversor de DynamoDB JSON para preparar Items semilla en el formato de red.
Errores relacionados
- Unable to start DynamoDB Local process — el fallo de arranque paraguas dentro del que esto suele esconderse.
- DynamoDB Local port 8000 in use
- Could not connect to DynamoDB Local
- Aprende: Ejecutar DynamoDB Local
Referencias
- 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)
Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.