본문 바로가기
[개발] 프레임워크/QueryDSL

QueryDSL 셋팅 시 발생하는 에러 개선

by Devsong26 2024. 11. 14.

프로젝트 스펙은 다음과 같았습니다.

  • jdk 17
  • spring boot 2.7.18

 

QueryDSL 의존성은 다음과 같이 추가했습니다.

implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"

 

이 상황에서 빌드를 수행하니 다음과 같은 에러가 발생했습니다.

Execution failed for task ':compileJava'. > java.lang.NoClassDefFoundError: jakarta/persistence/Entity

 

컴파일 작업을 수행 중에 jakarta/persistence/Entity 를 발견하지 못했다는 것입니다.

 

 

현재 jakarta.annotation-api 와 jakarta.persistence-api 의 버전은 다음과 같았습니다.

- jakarta.persistence-api : 2.2.3

- jakarta.annotation-api : 1.3.5 

 

에러가 난 이유와 관련된 라이브러리는 jakarta.persistence-api 라고 하여 이 버전을 올려 보려고 했습니다.

메이븐 레파지토리에서 확인한 결과 다음과 같이 버전들이 나열되어 있었습니다.

 

 

 

보통 Usages가 가장 높은 버전을 선호하는데 이유는 다음과 같습니다.

  • 안정성: Usages 수가 많은 버전은 다른 프로젝트에서 많이 사용되고 있다는 뜻이므로, 상대적으로 안정성이 높다고 볼 수 있습니다.
  • 커뮤니티 검증: Usages가 많은 버전은 커뮤니티에서도 자주 사용되므로, 문제나 버그에 대한 해결 방법을 찾기가 쉽습니다.
  • 호환성: 널리 쓰이는 버전은 다양한 환경에서 테스트되었기 때문에, 다른 라이브러리와의 호환성이 높을 가능성이 있습니다.
  • 장기적인 유지보수: 많이 사용되는 버전은 보통 장기적인 유지보수가 더 잘 이루어질 가능성이 큽니다.

 

위와 같은 이유로 3.1.0 버전을 선택하여 재빌드를 해봤습니다.

 

하지만 이번에는 jakarta.persistence 패키지 자체를 인식하지 못하는 에러가 발생했습니다.

error: package javax.persistence does not exist import javax.persistence.Column

 

확인해보니 기존에 2.2.3은 어떤 라이브러리 의존성에 의해 계속 존재한 상태였고 3.1.0이 추가되어 라이브러리 충돌로 인해 패키지를 찾지 못하는 것으로 보여졌습니다.

 

다시 jakarta.persistence-api의 버전을 원복하고 다른 방법을 찾아보기로 했습니다.

 

 

https://velog.io/@juhyeon1114/Spring-QueryDsl-gradle-%EC%84%A4%EC%A0%95-Spring-boot-3.0-%EC%9D%B4%EC%83%81

 

[Spring] QueryDsl gradle 설정 (Spring boot 3.0 이상)

스프링 부트 3.0이상에서의 Querydsl 설정방법

velog.io

 

위 블로그를 살펴보는 중 스프링 부트 3.0 미만은 jakarta를 뺀 상태에서 의존성 주입을 하라고 나와 있어서 밑에 처럼 수정 후 빌드했더니 성공했습니다.

 

implementation 'com.querydsl:querydsl-jpa:5.0.0'
annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jpa"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"