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

DynamoDB 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-osx ikililerini paketler; bir ARM64 JVM onları yüklemeyi reddeder ("no matching architecture").
  • Eski bir kopyaya sabitlenen bir sarmalayıcıjest-dynamodb, serverless-dynamodb-local ve 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

  1. Onu belgelenen şekilde, çıkarılan klasörden başlatın:

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

  3. Ya da Docker ile yerel kitaplıkları tamamen atlayınamazon/dynamodb-local imajı en az kırılgan yoldur ve Apple Silicon'da çalışır:

    docker run -p 8000:8000 amazon/dynamodb-local
  4. Değ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.

  5. Bellek içi kaçış kapağı: -inMemory gü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

References

En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.

Console olmadan DynamoDB ile çalışın

DynoTable, DynamoDB için hızlı bir masaüstü istemcisidir — tablolara göz atın, SQL tarzı sorgular çalıştırın ve item'ları yerel olarak düzenleyin.