DynamoDB Local: Failed to load native library sqlite4java

TL;DR — O motor de armazenamento do DynamoDB Local carrega uma biblioteca nativa (sqlite4java) na inicialização, e a JVM ou não consegue encontrá-la ou não consegue executá-la. Duas causas clássicas: você lançou o jar sem -Djava.library.path=./DynamoDBLocal_lib, ou você está em um Mac com Apple Silicon e o binário empacotado é para x86_64. Aponte a JVM para a pasta de bibliotecas nativas, atualize para um DynamoDB Local atual, ou rode a imagem Docker multi-arch.

O que 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

O DynamoDB Local é uma aplicação Java cujo armazenamento em disco é sustentado por uma biblioteca nativa (por SO, por arquitetura). UnsatisfiedLinkError é a JVM dizendo que não conseguiu linkar aquele binário — ou ele não está no library path de jeito nenhum, ou o arquivo existe mas foi compilado para um SO/CPU diferente da sua JVM. O emulador não consegue iniciar sem ele.

Por que acontece

  • -Djava.library.path ausente — o download traz as bibliotecas nativas em DynamoDBLocal_lib/, e o comando de lançamento documentado precisa apontar a JVM para lá. Rodar java -jar DynamoDBLocal.jar sozinho (ou de um diretório de trabalho diferente) as perde.
  • Apple Silicon (série M) + uma nativa x86_64 — builds e wrappers mais antigos do DynamoDB Local empacotam apenas binários Intel libsqlite4java-osx; uma JVM ARM64 se recusa a carregá-los ("no matching architecture").
  • Um wrapper fixando uma cópia antigajest-dynamodb, serverless-dynamodb-local e ferramentas similares baixam seu próprio DynamoDB Local; uma versão antiga cacheada mantém as nativas obsoletas por perto mesmo depois de você "atualizar".
  • Nativas extraídas para um dir temporário que foi limpo — alguns setups descompactam em uma pasta temporária que o SO limpa, então funciona até o reboot.

Como corrigir

  1. Lance-o da forma documentada, a partir da pasta extraída:

    java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
  2. Atualize o DynamoDB Local — baixe a versão atual; builds mais novos resolvem a situação do Apple Silicon que atormentava os antigos. Se um wrapper gerencia a instalação, limpe seu cache/reinstale para que ele de fato busque a nova versão.

  3. Ou contorne as nativas inteiramente com Docker — a imagem amazon/dynamodb-local é o caminho menos frágil e roda no Apple Silicon:

    docker run -p 8000:8000 amazon/dynamodb-local
  4. No Apple Silicon com um build antigo que você não pode mudar: rode um JDK x86_64 sob Rosetta 2 (as nativas Intel então combinam com a JVM), ou substitua libsqlite4java-osx.dylib pelo build ARM64 do sqlite4java publicado pela comunidade.

  5. Escape em memória: -inMemory ainda precisa da biblioteca nos builds atuais — não é uma solução alternativa para uma nativa ausente; corrija o path/arquitetura em vez disso.

Uma vez que o emulador esteja no ar, aponte suas ferramentas para ele — o app desktop DynoTable conecta-se ao DynamoDB Local em http://localhost:8000 para que você possa criar tabelas e inspecionar dados sem escrever um script. Use o conversor de DynamoDB JSON para preparar itens de seed no formato de fio.

Erros relacionados

Referências

Verificado pela última vez em 2026-07-13 contra a documentação oficial da AWS vinculada acima.

Trabalhe com o DynamoDB sem o Console

O DynoTable é um cliente desktop rápido para o DynamoDB — navegue pelas tabelas, execute consultas no estilo SQL e edite itens localmente.