DynamoDB Local: UnsupportedClassVersionError

TL;DR — Seu runtime Java é mais antigo do que aquele para o qual o DynamoDB Local foi compilado. O DynamoDB Local atual (v2.6.0 e mais novo, incluindo v3.x) requer JRE 17+ — lançá-lo no Java 8/11 faz a JVM recusar os arquivos de classe com UnsupportedClassVersionError. Instale um runtime Java 17+ (Temurin, Corretto, …) e rode novamente, ou pule o Java local inteiramente com a imagem Docker amazon/dynamodb-local.

O que 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

Os números decodificam a incompatibilidade: a versão de arquivo de classe 61 é Java 17, 52 é Java 8. O bytecode do jar mira uma JVM mais nova do que o java no seu PATH, então a JVM aborta antes de o DynamoDB Local rodar uma única linha. A AWS documenta o piso explicitamente: v2.6.0+ não roda em JREs mais antigos que 17.

Por que acontece

  • O java do sistema ainda é 8 ou 11 — comum em imagens de CI mais antigas e máquinas onde um JDK LTS foi instalado anos atrás.
  • JAVA_HOME/PATH apontam para o JDK antigo — um JDK mais novo está instalado, mas o shell resolve o legado primeiro.
  • Uma atualização do DynamoDB Local cruzou o requisito — os jars 1.x rodavam no Java 8; substituí-los por 2.x/3.x silenciosamente elevou a exigência para 17.
  • Uma ferramenta de build fixa o toolchain — Maven/Gradle configurado com um toolchain antigo lança o DynamoDB Local embutido sob ele.

Como corrigir

  1. Verifique o que está de fato rodando:

    java -version
  2. Instale um runtime Java 17+ (qualquer distribuição — Eclipse Temurin, Amazon Corretto, etc.) e aponte seu shell para ele:

    export JAVA_HOME=/path/to/jdk-17
    export PATH="$JAVA_HOME/bin:$PATH"
    java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
  3. Ou elimine o requisito de Java local — a imagem Docker traz um runtime compatível:

    docker run -p 8000:8000 amazon/dynamodb-local
  4. Atualize imagens de CI e toolchains — fixe Java 17+ onde quer que o DynamoDB Local inicie (test runners, toolchains do Maven/Gradle), para que o erro não ressurja por máquina.

Uma vez que ele inicialize na porta 8000, aponte suas ferramentas para http://localhost:8000 — o app desktop DynoTable conecta-se ao DynamoDB Local como um endpoint de primeira classe, e o DynamoDB Expression Builder esboça as consultas que você rodará contra ele.

Erros relacionados

Referências

Verificado pela última vez em 2026-07-13 contra a documentação oficial da AWS vinculada acima.

Trabalhe com o DynamoDB sem o Console

O DynoTable é um cliente desktop rápido para o DynamoDB — navegue pelas tabelas, execute consultas no estilo SQL e edite itens localmente.