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.pathO 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.pathausente — o download traz as bibliotecas nativas emDynamoDBLocal_lib/, e o comando de lançamento documentado precisa apontar a JVM para lá. Rodarjava -jar DynamoDBLocal.jarsozinho (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 antiga —
jest-dynamodb,serverless-dynamodb-locale 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
Lance-o da forma documentada, a partir da pasta extraída:
java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDbAtualize 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.
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-localNo 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.dylibpelo build ARM64 do sqlite4java publicado pela comunidade.Escape em memória:
-inMemoryainda 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
- Unable to start DynamoDB Local process — a falha de inicialização guarda-chuva dentro da qual isto frequentemente se esconde.
- DynamoDB Local port 8000 in use
- Could not connect to DynamoDB Local
- Aprenda: Running DynamoDB Local
Referências
- 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 pela última vez em 2026-07-13 contra a documentação oficial da AWS vinculada acima.