스프링 부트 3.2.5 버전에서 QueryDSL을 사용하기 위한 build.gradle
설정 방법이다.
// build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.5'
id 'io.spring.dependency-management' version '1.1.4'
// QueryDSL 플러그인 추가
id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10'
}
group = 'study'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// 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"
// QueryDSL 라이브러리 추가 끝
}
tasks.named('test') {
useJUnitPlatform()
}
// QueryDSL 추가
def querydslDir = "src/main/generated/querydsl"
querydsl{
library = "com.querydsl:querydsl-apt"
jpa = true
querydslSourcesDir = querydslDir
}
sourceSets{
main {
java {
srcDirs = ['src/main/java', querydslDir]
}
}
}
compileQuerydsl{
options.annotationProcessorPath = configurations.querydsl
}
configurations{
querydsl.extendsFrom compileClasspath
}
clean {
delete file('src/main/generated')
}
// QueryDSL 추가 끝
QueryDSL을 사용하기 위해서는 반드시 플러그인과 라이브러리를 추가해야한다.
start.spring.io 에서 프로젝트를 생성할 때 QueryDSL dependency 추가가 없기 때문에, 프로젝트 생성 후 build.gradle
에서 직접 추가해주어야 한다.
하단의 코드들은 QueryDSL을 컴파일 했을 때 QClass가 위치할 수 있는 경로를 설정하는 코드이다. src/main/generated
아래에 querydsl 디렉토리가 생성될 수 있도록 했다.
Querydsl-apt는 QClass 생성을 위한 라이브러리이고, Qurydsl-jpa는 QuryDSL을 사용할 때 SQL 쿼리를 작성해주는 라이브러리이다.
Gradle 탭에서 Tasks-other-compileQuerydsl
을 실행하여 컴파일을 한다.
컴파일을 하면 프로젝트에 존재하는 엔티티들을 QClass로 생성해준다.
컴파일 후에 다음과 같이 설정했던 경로 아래에 QClass가 생긴 것을 확인할 수 있다. 현재 프로젝트에 Hello라는 엔티티만 존재하기 때문에 QHello 클래스가 생성되었다.
혹은 터미널에서 프로젝트 위치로부터 ./gradlew clean
과 ./gradlew compileQuerydsl
을 실행하여 컴파일할 수 있다.
QClass가 생성되는 경로는 git에 올리면 안된다. 그래서 해당 경로를 .gitignore
에 추가하여 git에 커밋하지 못하도록 한다.
만약 다음과 같이 Could not find class file for
오류가 발생하면 생성했던 경로의 디렉토리를 삭제한다.
그리고 다시 compileQuerydsl을 실행하지 않고, 그냥 애플리케이션을 실행한다. 그러면 정상적으로 동작한다.