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。

如何修复

  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 会草拟你将对它运行的查询。

相关错误

References

最后核实于 2026-07-13,依据上方链接的 AWS 官方文档。

无需控制台即可使用 DynamoDB

DynoTable 是面向 DynamoDB 的快速桌面客户端 —— 浏览表、运行 SQL 风格的查询,并在本地编辑项。