DynamoDB 로컬: 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

이것은 DynamoDB 서비스가 아닌 JVM Error입니다. Exception - 프로세스가 종료됩니다. DynamoDB Local이 포트를 바인딩하기 전. 클래스 파일 버전 61은 Java 17, 52입니다. Java 8입니다. jar의 바이트코드는 java보다 최신 JVM을 대상으로 합니다. PATH, 따라서 DynamoDB Local이 단일 라인을 실행하기 전에 JVM이 중단됩니다. AWS 바닥을 명시적으로 문서화합니다. v2.6.0+는 17보다 오래된 JRE에서는 실행되지 않습니다.

왜 발생하는가

  • 시스템 java는 여전히 8 또는 11입니다. 이는 몇 년 전에 LTS JDK가 설치된 이전 CI 이미지 및 시스템에서 일반적입니다.
  • 이전 JDK의 JAVA_HOME/PATH 지점 — 최신 JDK가 설치되었지만 셸은 레거시 JDK를 먼저 해결합니다.
  • 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 Local 단계 전에 17에 태그를 지정합니다.

어떻게 해결하는가

  1. 실제로 실행 중인 항목을 확인하세요.

    java -version
  2. Java 17+ 런타임(Eclipse Temurin, Amazon Corretto 등 모든 배포판)을 설치하고 셸에서 이를 가리킵니다.

    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이 시작될 때마다(테스트 실행기, Maven/Gradle 도구 체인) Java 17+를 고정하여 컴퓨터별로 오류가 다시 발생하지 않도록 합니다.

DynoTable에서 찾기

로컬 JRE를 완전히 건너뛰십시오. docker run -p 8000:8000 amazon/dynamodb-local를 실행하고, install DynoTable, 설정 →에서 로컬 프로필을 추가하세요. 프로필 → 프로필 추가 엔드포인트 http://localhost:8000. 연결 테스트 테이블을 열기 전에 로컬이 작동 중인지 확인합니다. 일단 부팅되면, DynamoDB Expression Builder 초안 쿼리 에뮬레이터에 대해 실행할 수 있습니다.

관련 오류

출처

Console 없이 DynamoDB 작업하기

DynamoDB로는 실행할 수 없는 진짜 SQL(JOINs, GROUP BY, 집계)을 실행하는 빠른 DynamoDB 데스크톱 클라이언트. 시각적 편집과 여러분 자신의 Bedrock 키로 동작하는 AI 에이전트를 제공합니다.

30일 무료 체험, 신용카드 불필요 — 이후 기간 제한 없는 무료 요금제.