DynamoDB Local: Failed to load native library sqlite4java
TL;DR — DynamoDB Local'in depolama motoru başlangıçta yerel bir kitaplığı (sqlite4java) yükler ve JVM ya onu bulamaz ya da çalıştıramaz. İki klasik neden: jar'ı -Djava.library.path=./DynamoDBLocal_lib olmadan başlattınız ya da bir Apple Silicon Mac'tesiniz ve paketlenmiş ikili x86_64 için. JVM'i yerel kitaplık klasörüne yöneltin, güncel bir DynamoDB Local'e güncelleyin ya da çoklu mimarili Docker imajını çalıştırın.
Ne anlama gelir
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, disk üzerindeki depolaması yerel (işletim sistemi başına, mimari başına) bir kitaplıkla desteklenen bir Java uygulamasıdır. UnsatisfiedLinkError, JVM'in o ikiliyi bağlayamadığını söylemesidir — ya hiç kitaplık yolunda değildir ya da dosya vardır ama JVM'inizden farklı bir işletim sistemi/CPU mimarisi için oluşturulmuştur. Emülatör o olmadan başlayamaz.
Neden olur
- Eksik
-Djava.library.path— indirme, yerel kitaplıklarıDynamoDBLocal_lib/içinde gönderir ve belgelenen başlatma komutu JVM'i oraya yöneltmelidir.java -jar DynamoDBLocal.jar'ı çıplak (ya da farklı bir çalışma dizininden) çalıştırmak onları kaybeder. - Apple Silicon (M serisi) + bir x86_64 yerel kitaplığı — eski DynamoDB Local yapıları ve sarmalayıcılar yalnızca Intel
libsqlite4java-osxikililerini paketler; bir ARM64 JVM onları yüklemeyi reddeder ("no matching architecture"). - Eski bir kopyaya sabitlenen bir sarmalayıcı —
jest-dynamodb,serverless-dynamodb-localve benzer araçlar kendi DynamoDB Local'lerini indirir; önbelleğe alınmış eski bir sürüm, "güncelledikten" sonra bile bayat yerel kitaplıkları etrafta tutar. - Temizlenen bir geçici dizine çıkarılan yerel kitaplıklar — bazı kurulumlar işletim sisteminin temizlediği bir geçici klasöre açar, bu yüzden yeniden başlatmaya kadar çalışır.
Nasıl düzeltilir
Onu belgelenen şekilde, çıkarılan klasörden başlatın:
java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDbDynamoDB Local'i güncelleyin — güncel sürümü indirin; daha yeni yapılar, eskilerini rahatsız eden Apple Silicon durumunu çözer. Bir sarmalayıcı kurulumu yönetiyorsa, gerçekten yeni sürümü getirmesi için önbelleğini temizleyin/yeniden kurun.
Ya da Docker ile yerel kitaplıkları tamamen atlayın —
amazon/dynamodb-localimajı en az kırılgan yoldur ve Apple Silicon'da çalışır:docker run -p 8000:8000 amazon/dynamodb-localDeğiştiremeyeceğiniz eski bir yapıya sahip Apple Silicon'da: Rosetta 2 altında bir x86_64 JDK çalıştırın (Intel yerel kitaplıkları o zaman JVM ile eşleşir) ya da
libsqlite4java-osx.dylib'i topluluk tarafından yayınlanan ARM64 sqlite4java yapısıyla değiştirin.Bellek içi kaçış kapağı:
-inMemorygüncel yapılarda hâlâ kitaplığa ihtiyaç duyar — eksik bir yerel kitaplık için bir geçici çözüm değildir; bunun yerine yolu/mimariyi düzeltin.
Emülatör açıldığında, araçlarınızı ona yöneltin — DynoTable masaüstü uygulaması DynamoDB Local'e http://localhost:8000 adresinde bağlanır, böylece bir betik yazmadan tablolar oluşturabilir ve veriyi inceleyebilirsiniz. Tohum öğelerini kablo biçiminde hazırlamak için DynamoDB JSON dönüştürücüsünü kullanın.
İlgili hatalar
- Unable to start DynamoDB Local process — bunun sıklıkla içinde gizlendiği şemsiye başlatma hatası.
- DynamoDB Local port 8000 in use
- Could not connect to DynamoDB Local
- Öğrenin: Running DynamoDB Local
References
- 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)
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.