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()
}