ANTLR Tool version … used for code generation does not match the current runtime version …

Version mismatch between Hibernate and Spring Data JPA (EX : Cannot invoke "org.antlr.v4.runtime.ParserRuleContext.getParent()" because "ctx" is null)
김주혁's avatar
Jan 07, 2025
ANTLR Tool version … used for code generation does not match the current runtime version …
 

ANTLR 이란?


 
ANTLR(ANother Tool for Language Recognition)은 파서와 렉서를 자동으로 생성하는 도구입니다. 기본적으로는, “ANTLR 도구 버전이 코드 생성에 사용된 버전과 현재 런타임 버전이 일치하지 않습니다” 라는 에러입니다.
 
여기서 파서와 렉서란, 프로그래밍 언어와 텍스트를 분석하는데 사용되는 요소입니다.
  • 렉서(Lexer, 어휘 분석기)
    • 입력 텍스트를 토큰(token)이라는 작은 단위로 분해합니다.
    • 문자열을 의미 있는 최소 단위로 나누는 과정을 수행합니다.
    • 예를 들어, "int x = 10;"이라는 코드에서:
      • "int" → 키워드 토큰
      • "x" → 식별자 토큰
      • "=" → 할당 연산자 토큰
      • "10" → 숫자 리터럴 토큰
      • ";" → 세미콜론 토큰
  • 파서(Parser, 구문 분석기)
    • 렉서가 생성한 토큰들을 받아 문법적 구조를 분석합니다.
    • 토큰들의 시퀀스가 특정 언어의 문법 규칙에 맞는지 확인합니다.
    • 토큰들의 계층적 구조(추상 구문 트리, AST)를 생성합니다.
 

원인


 
Java의 Hibernate와 Spring Data JPA는 ANTLR을 사용하여 HQL 쿼리를 구문 분석하고 처리합니다.
 
그런데 여기서 문제가 되는 것은, Hibernate는 Spring Boot가 관리하는 것과 별개로 ALTNR 버전 자체는 Spring Data JPA가 가져오는 것 입니다. 따라서 Hibernate 6.4. Final이 antlr4 버전 4.13.0을 사용하지만 spring-boot-starter-data-jpa 3.2.0은 여전히 antlr4 버전 4.10.1을 사용하고 있고 이로 인해 경고 메시지가 발생합니다.
 
Spring Data JPA가 다른 Hibernate 버전에 맞춰 릴리즈 되는 경우, 버전간 불일치 현상이 발생할 수 있어 이 버전을 맞춰주는 것이 경고에 대한 해결책이 될 수 있어, 현재 나의 Spring Data JPA가 특정한 버전을 사용하고 있지 않다면, Hibernate 버전에 맞춘 버전으로 수정하는 것을 권장합니다.
 
예를들면, spring data jpa 프로젝트 깃헙에서 3.2.1 버전에서 Hibernate 6.4.0 Fianl 버전에 맞춰 ANTLR 버전을 업그레이드 한 케이스가 있고 이대로 맞춘다면 경고문구가 사라집니다.
 
 
상기의 이유로 만약, Cannot invoke "org.antlr.v4.runtime.ParserRuleContext.getParent()" because "ctx" is null의 에러가 발생한다면 Hibernate 버전과 Spring Data JPA 버전을 통일 시키는 것으로 해결가능할 것 입니다.
 

결론


 
결론적으로는 Spring Data JPA 버전과 Hibernate 버전의 불일치(혹은 Spring Boot 버전까지 포함하여)로 발생하는 경고문구입니다.
 
Share article

vlogue