카테고리 없음
[에러 회고] 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 이상부턴 javax
가 jakarta
로 대체되었다.
따라서 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) 오류 해결