DynamoDB Local: UnsupportedClassVersionError

TL;DR — 你的 Java 執行環境比 DynamoDB Local 編譯所用的更舊。目前的 DynamoDB Local(v2.6.0 及更新,包括 v3.x)需要 JRE 17+** — 在 Java 8/11 上啟動它會讓 JVM 以 UnsupportedClassVersionError 拒絕這些 class 檔。安裝 Java 17+ 執行環境(Temurin、Corretto…)並重新執行,或以 amazon/dynamodb-local Docker 映像完全跳過本地 Java。**

這是什麼意思

Error: A JNI error has occurred...
java.lang.UnsupportedClassVersionError: com/amazonaws/services/dynamodbv2/local/main/ServerRunner
has been compiled by a more recent version of the Java Runtime
(class file version 61.0), this version of the Java Runtime only
recognizes class file versions up to 52.0

這些數字解碼了不符:class 檔版本 61 是 Java 17,52 是 Java 8。jar 的位元組碼以比你 PATH 上的 java 更新的 JVM 為目標,因此 JVM 在 DynamoDB Local 執行任何一行之前就中止。AWS 明確記載了下限:v2.6.0+ 無法在比 17 更舊的 JRE 上執行。

為什麼會發生

  • 系統 java 仍是 8 或 11 — 在舊的 CI 映像與多年前安裝了 LTS JDK 的機器上很常見。
  • JAVA_HOME/PATH 指向舊的 JDK — 安裝了較新的 JDK,但 shell 先解析到舊的那個。
  • DynamoDB Local 的升級跨越了需求 — 1.x 的 jar 可在 Java 8 上執行;以 2.x/3.x 替換它們默默地將門檻提高到 17。
  • 建置工具釘住 toolchain — 以舊 toolchain 設定的 Maven/Gradle 在其下啟動內嵌的 DynamoDB Local。

如何修正

  1. 檢查實際執行的是什麼:

    java -version
  2. 安裝 Java 17+ 執行環境(任何發行版 — Eclipse Temurin、Amazon Corretto 等)並將你的 shell 指向它:

    export JAVA_HOME=/path/to/jdk-17
    export PATH="$JAVA_HOME/bin:$PATH"
    java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
  3. 或移除本地 Java 需求 — Docker 映像隨附相容的執行環境:

    docker run -p 8000:8000 amazon/dynamodb-local
  4. 更新 CI 映像與 toolchain — 在任何 DynamoDB Local 啟動之處(測試執行器、Maven/Gradle toolchain)釘住 Java 17+,讓錯誤不會在每台機器上再次出現。

一旦它在連接埠 8000 上啟動,將你的工具指向 http://localhost:8000DynoTable 桌面應用程式以第一級端點連到 DynamoDB Local,而 DynamoDB Expression Builder 草擬你將對它執行的查詢。

相關錯誤

References

最後驗證於 2026-07-13,對照上方連結的 AWS 官方文件。

不必透過主控台就能操作 DynamoDB

DynoTable 是一款快速的 DynamoDB 桌面用戶端 — 瀏覽表格、執行 SQL 風格的查詢,並在本機編輯項目。