카테고리 없음

[에러 회고] jakarta.servlet.ServletException: Request processing failed: java.lang.RuntimeException: java.lang.NoClassDefFoundError: javax/persistence/NoResultException (queryDSL, spring boot 3.0, jakarta)

Unagi_zoso 2024. 2. 21. 01:27

환경

  • spring boot 3.2.2
  • java 17

상황

queryDSL 5.0.0 종속성을 추가하였더니 테스트 케이스가 다음 예외를 발생하며 실패하였다.

jakarta.servlet.ServletException: Request processing failed: java.lang.RuntimeException: java.lang.NoClassDefFoundError: javax/persistence/NoResultException

...

해결 방안

spring boot 3.0.0 이상부턴 javaxjakarta 로 대체되었다.
따라서 queryDSL 에도 jakarta 버전을 기재해야 된 것이다.

// queryDSL 설정
    implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' // jpa, core 필수 의존성. spring boot 3.0.0 이상 부터 jakarta
    implementation 'com.querydsl:querydsl-core'
    implementation 'com.querydsl:querydsl-collections'
    // apt의 경우 스프링부트 3.0.0 이상 부터는 :jakarta 를 붙여줘야한다.
    annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties["querydsl.version"]}:jakarta" // 그루비 문법으로 버전 자동 기입되게
    annotationProcessor 'jakarta.annotation:jakarta.annotation-api' // java.lang.NoClassDefFoundError (javax.annotation.Generated) 오류 해결
    annotationProcessor "jakarta.persistence:jakarta.persistence-api" // java.lang.NoClassDefFoundError (javax.persistence.Entity) 오류 해결