DynamoDB Local: UnsupportedClassVersionError

TL;DR — 你的 Java 執行時比 DynamoDB Local 編譯時所針對的更舊。當前的 DynamoDB Local(v2.6.0 及更新,包括 v3.x)要求 JRE 17+——在 Java 8/11 上啟動它會使 JVM 以 UnsupportedClassVersionError 拒絕那些類檔案。安裝一個 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

這些數字解碼出了不匹配:類檔案版本 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。
  • 一個構建工具固定了工具鏈——配置了舊工具鏈的 Maven/Gradle 會在其下啟動嵌入式的 DynamoDB Local。

當安裝多個JDK時,which javaecho $JAVA_HOME經常不一致 — 該外掛可能會呼叫一個包裝器指令碼,即使在之後該指令碼仍然解析為 Java 11 你在 PATH 的其他位置安裝了 17。

固定到 eclipse-temurin:11 的 CI 影象是常見的來源 — 凹凸影象在管道中的 DynamoDB 本地步驟之前標記為 17。

如何修正

  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 映象和工具鏈——在 DynamoDB Local 啟動的每一處都固定 Java 17+(測試執行器、Maven/Gradle 工具鏈),這樣錯誤就不會在每臺機器上再次出現。

一旦它在埠 8000 上啟動,就把你的工具指向 http://localhost:8000——DynoTable 桌面應用把 DynamoDB Local 作為一等端點來連線,而 DynamoDB Expression Builder 會草擬你將對它執行的查詢。

在 DynoTable 中定位

完全跳過本地 JRE:執行 docker run -p 8000:8000 amazon/dynamodb-localinstall DynoTable,並在設定中新增本地設定檔案→ 設定檔案 → 新增 Profile 和端點 http://localhost:8000Test Connection 在開啟桌子之前確認 Local 已啟動。一旦啟動, DynamoDB Expression Builder 草稿查詢你可以在模擬器上執行。

相關錯誤

來源

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

一款快速的 DynamoDB 桌面用戶端,可執行 DynamoDB 無法執行的真正 SQL — JOINs、GROUP BY、聚合 — 並支援視覺化編輯與使用你自己的 Bedrock 金鑰的 AI 代理。

30 天免費試用,無需信用卡 — 之後為無時間限制的免費方案。