DynamoDB Local: UnsupportedClassVersionError

TL;DR — Tu runtime de Java es más antiguo que aquel para el que se compiló DynamoDB Local. Las versiones actuales de DynamoDB Local (v2.6.0 y más nuevas, incluida la v3.x) requieren JRE 17+ — lanzarlo sobre Java 8/11 hace que la JVM rechace los archivos de clase con UnsupportedClassVersionError. Instala un runtime de Java 17+ (Temurin, Corretto, …) y vuelve a ejecutar, o evita el Java local por completo con la imagen Docker amazon/dynamodb-local.

Qué significa

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

Los números descifran el desajuste: la versión de archivo de clase 61 es Java 17, la 52 es Java 8. El bytecode del jar apunta a una JVM más nueva que el java de tu PATH, así que la JVM aborta antes de que DynamoDB Local ejecute una sola línea. AWS documenta el mínimo de forma explícita: v2.6.0+ no corre en JRE anteriores a 17.

Por qué ocurre

  • El java del sistema sigue siendo 8 u 11 — común en imágenes de CI antiguas y en máquinas donde se instaló un JDK LTS hace años.
  • JAVA_HOME/PATH apuntan al JDK antiguo — hay un JDK más nuevo instalado, pero la shell resuelve primero el heredado.
  • Una actualización de DynamoDB Local cruzó el requisito — los jars 1.x corrían en Java 8; reemplazarlos por 2.x/3.x subió silenciosamente el listón a 17.
  • Una herramienta de build fija el toolchain — Maven/Gradle configurados con un toolchain antiguo lanzan el DynamoDB Local integrado bajo él.

Cómo solucionarlo

  1. Comprueba qué se está ejecutando realmente:

    java -version
  2. Instala un runtime de Java 17+ (cualquier distribución — Eclipse Temurin, Amazon Corretto, etc.) y apunta tu shell a él:

    export JAVA_HOME=/path/to/jdk-17
    export PATH="$JAVA_HOME/bin:$PATH"
    java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
  3. O elimina el requisito de Java local — la imagen Docker incluye un runtime compatible:

    docker run -p 8000:8000 amazon/dynamodb-local
  4. Actualiza las imágenes de CI y los toolchains — fija Java 17+ allá donde arranque DynamoDB Local (test runners, toolchains de Maven/Gradle), para que el error no reaparezca por máquina.

Una vez que arranque en el puerto 8000, apunta tus herramientas a http://localhost:8000 — la aplicación de escritorio DynoTable se conecta a DynamoDB Local como un endpoint de primera clase, y el DynamoDB Expression Builder redacta las consultas que ejecutarás contra él.

Errores relacionados

Referencias

Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.

Trabaja con DynamoDB sin la Consola

DynoTable es un cliente de escritorio rápido para DynamoDB: explora tablas, ejecuta consultas estilo SQL y edita Items localmente.