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.0Los 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
javadel 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/PATHapuntan 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
Comprueba qué se está ejecutando realmente:
java -versionInstala 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 -sharedDbO elimina el requisito de Java local — la imagen Docker incluye un runtime compatible:
docker run -p 8000:8000 amazon/dynamodb-localActualiza 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
- DynamoDB Local: unable to start process — otros fallos de arranque una vez que el propio Java es correcto.
- DynamoDB Local: sqlite4java errors — el hermano de biblioteca nativa.
- DynamoDB Local: port 8000 in use
- Aprende: DynamoDB Local
Referencias
- Deploying DynamoDB locally on your computer — AWS DynamoDB Developer Guide (the JRE 17+ requirement for v2.6.0+, launch command, version listing)
- DynamoDB local usage notes — AWS DynamoDB Developer Guide (
-sharedDband the other runtime options) - amazon/dynamodb-local — Docker Hub (official image bundles a compatible Java runtime)
Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.