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

DynamoDB 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 en DynamoDBLocal_lib/, y el comando de lanzamiento documentado debe apuntar la JVM ahí. Ejecutar java -jar DynamoDBLocal.jar a 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 antiguajest-dynamodb, serverless-dynamodb-local y 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

  1. Láncalo de la forma documentada, desde la carpeta extraída:

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

  3. O evita las nativas por completo con Docker — la imagen amazon/dynamodb-local es el camino menos frágil y funciona en Apple Silicon:

    docker run -p 8000:8000 amazon/dynamodb-local
  4. En 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.dylib con la versión ARM64 de sqlite4java publicada por la comunidad.

  5. Salida de emergencia en memoria: -inMemory sigue 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

Referencias

Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.

Trabaja con DynamoDB sin la Consola

DynoTable es un cliente de escritorio rápido para DynamoDB: explora tablas, ejecuta consultas estilo SQL y edita Items localmente.