본문 바로가기
Spring

[Spring] Querydsl Gradle 설정 (Gradle 7.X)

by 가드 2022. 11. 18.
728x90

Gradle에 Querydsl Dependencies 설정

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'com.querydsl:querydsl-jpa' // Querydsl 추가
    annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa"

    // 아래는 NoClassDefFoundError 발생 시 추가 고려사항.
    annotationProcessor("jakarta.persistence:jakarta.persistence-api") // java.lang.NoClassDefFoundError(javax.annotation.Entity) 발생 시 추가
    annotationProcessor("jakarta.annotation:jakarta.annotation-api")  // java.lang.NoClassDefFoundError (javax.annotation.Generated) 발생 시 추가
}

dependencies 추가할 때 querydsl을 사용하려면 spring-boot-starter-data-jpa도 같이 추가되어 있어야 한다.

query-apt가 쿼리 타입(Q class)을 생성할 수 있게 하는 라이브러리인데 annotationProcessor 설정을 추가해준다.

java.lang.NoClassDefFoundError가 발생한다면 annotationProcessor("jakarta.persistence:jakarta.persistence-api"), annotationProcessor("jakarta.annotation:jakarta.annotation-api") 추가해주면 된다.

 

Build And run using 설정

build and run

Preferences -> Build, Execution, Deployment -> Build Tools -> Gradle 설정으로 위와 같은 이미지 화면이 나올 텐데 Build and run using 설정란에 Gradle과 Inetellij 선택 사항이 있다.

 

Gradle로 설정되었을 경우

build/generated/sources/annotationProcessor/java/main 경로에 Q class 파일들이 생성된다. 엔티티 위치가 변경 또는 삭제가 되었을 경우에는 기존에 생성되어 있던 Q class 파일을 삭제해줘야 하므로 gradle clean으로 삭제를 진행하자.

build

 

IntelliJ로 설정되었을 경우

src/main/generated 경로에 Q class 파일들이 생성된다.

generated

엔티티 위치가 변경 또는 삭제가 되었을 경우에는 기존에 생성되어 있던 Q class 파일을 삭제해줘야 한다. build.bradle에 task를 작성하여 삭제하도록 한다.

def generatedJavaSrcDir = 'src/main/generated'
def queryDslOutput = file(generatedJavaSrcDir)
/** clean task 실행 시 generatedJavaSrcDir의 QClass 삭제 */
clean {
    delete queryDslOutput
}

 

Gradle과 Intellij Build 차이

실행하기 위한 실행 가능한 결과물을 만드는 방식의 차이인데 Gradle은 오픈 소스 빌드 자동화 도구이고 Intellij는 인텔리제이 자체에서 제공하는 빌드 자동화 도구이다. 둘의 차이는 증분 빌드 방식이냐 아니냐의 차이이다.

증분 빌드는 증분 된 부분을 뜻하는데 즉 변경된 부분만 빌드를 하는 방식으로 변경되지 않는 부분은 건너뛰고 빌드를 진행하기 때문에 빠른 빌드를 원할 경우 선택하는 방법이다. Intellij Build가 증분 빌드이다.

둘 중 어느 방식으로 빌드해서 상관은 없지만 인텔리제이 빌드가 속도 측면에서 유리한 점이 있다.

300x250

댓글