SPRING
[SPRING] Spring Boot 3.x queryDsl Gradle 설정
steadyMan
2024. 9. 14. 23:09
Spring boot 3.x 버전에서 querydsl 사용을 위한 의존성 및 gradle 설정에 대해 정리했습니다.
gradle 환경에서 진행하여 build.gradle파일 입력 사항에 대해 작성합니다.
설정 환경
- java 22
- spring boot 3.2.7
- gradle 8.8
1. querydsl와 JPA연동을 위한 라이브러리 의존성 추가
//== 기존(spring boot 2.x) Java EE 기반의 의존성 ==//
implementation 'com.querydsl:querydsl-jpa:{version}'
//== spring boot 3.x Jakarta EE 기반의 의존성 ==//
implementation 'com.querydsl:querydsl-jpa:{version}:jakarta'
//== 예시 ==//
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
spring boot 3.x 이상부터 Jakarta EE로 전환으로 인해 패키지 변경
2. annotationProcessor 활용 의존성 추가
//== 엔티티 클래스의 Q 클래스 파일을 annotationProcessor를 통해 생성한다 ==//
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
//== Jakarta EE에서 사용되는 표준 애노테이션들에 대한 API 제공 ==//
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
//== JPA 애노테이션 (@Entity, @id, @GeneratedValue 등)을 Jakarta 패키지로 제공하는 역할 ==//
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
${dependencyManagement.importedProperties['querydsl.version']}
이 부분은 버전을 직접 입력해도 무방하다. Maven, Gradle 프로젝트에서 의존성 버전을 관리할때 사용되는 방법으로 버전을 자동으로 설정하려는 경우에 사용가능하다.
// == 아래의 코드를 통해 버전관리 대상 확인 가능 ==//
dependencyManagement.importedProperties.forEach({key, value -> {
println "${key} : ${value}"
}})
3. Q클래스 파일 디렉토리 생성
def querydslDir = layout.buildDirectory.dir("generated/querydsl").get().asFile
gradle의 빌드 관련 파일들이 저장되는 기본 디렉토리인 build/ 하위에 Q클래스 파일을 저장할 디렉토리를 생성한다.
4. annotationProcessor를 통해 생성된 파일(Q 클래스)의 저장 디렉토리 설정
//== querydslDir의 경로에 annotationProcessor를 통해 생성된 파일이 저장되도록 설정 ==//
tasks.withType(JavaCompile).configureEach {
options.generatedSourceOutputDirectory.set(querydslDir)
}
5. main sourceSet에 Q클래스 파일 디렉토리 추가
sourceSets {
main.java.srcDirs += [ querydslDir ]
}
Q클래스 파일이 저장된 디렉토리를 main의 sourceSet에 추가 하여 gradle이 querydslDir 디렉토리의 파일들도 빌드의 일부로
인식하여 Q 클래스 파일들도 main 디렉토리의 파일들과 함께 컴파일 되고 빌드 과정에 활용할 수 있게 된다.
정리하면 querydslDir 경로의 Q클래스 파일들을 컴파일 및 배포 과정에 포함되도록 설정
6. gradle clean시 Q클래스 파일도 함께 제거 되도록 설정
//== 두 가지 방식중 택1 ==//
//== gradle clean 작업 수행 시 후속 작업으로 querydslDir 디렉토리의 파일들도 함께 제거 되도록 설정한다 ==//
clean.doLast {
file(querydslDir).deleteDir()
}
//== gradle clean과 함께 수행되도록 하려면 아래와 같이 설정한다 ==//
clean {
delete file(querydslDir)
}
7. [정리] (QueryDsl 관련한 설정만 표기)
dependencies {
...
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
...
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
}
def querydslDir = layout.buildDirectory.dir("generated/querydsl").get().asFile
tasks.withType(JavaCompile).configureEach {
options.generatedSourceOutputDirectory.set(querydslDir)
}
sourceSets {
main.java.srcDirs += [ querydslDir ]
}
clean.doLast {
file(querydslDir).deleteDir()
}