querydsl은 컴파일 시점에 Q클래스를 생성합니다. Q클래스는 도메인 엔티티에 대한 QueryDsl 전용 메타모델 클래스입니다. 이는 뒤에서 좀 더 설명하기로 하고 중요한 것은 이러한 점들을 고려하여 디펜던시 추가 및 설정을 추가하여야 할 부분이 있어 공유드립니다.
plugins {
id 'java'
id 'war'
id 'org.springframework.boot' version '3.4.3'
id 'io.spring.dependency-management' version '1.1.7'
// id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}
group = 'com.project'
version = '0.0.1-SNAPSHOT'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
dependencies {
......
// Querydsl 추가
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
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"
// lombok
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
def querydslDir = "$buildDir/generated/querydsl"
clean {
delete file(querydslDir)
}
tasks.withType(JavaCompile) {
options.generatedSourceOutputDirectory = file(querydslDir)
}
tasks.named('test') {
useJUnitPlatform()
}
현재 인터넷 상에는 스프링, jdk 버전에 맞춰 다양한 형태의 querydsl의 의존성 설정이 돌아다니고 있어 세팅하는데 애를 먹었습니다. 위 게시물은 'jdk17, spring 3.4' 버전을 기준으로 하고 있기 때문에 다른 버전을 사용하고 계신 분들은 구글링 시 버전명을 정확히 명시하여 최근 날짜 게시물을 참고하시는 것을 추천드립니다.
먼저 plugin의 querydsl 설정은 제외해주셔야 합니다. spring 3.0 이상으로 넘어오며 querydsl-apt 라이브러리를 의존성으로 추가할 때 기본 빌드 시스템에서 QClass를 생성하고 있습니다. 즉 gradle or maven 에서 기본으로 생성합니다.
의존성 추가 시에도 jakarta 5.0.0 버전을 정확히 명시해 주세요. 미기입 시 javax를 참조하기 때문에 제대로 처리되지 않을 수 있습니다.
빌드 시 querydsl qclass 저장 경로를 querydslDir로 명시해주었으며 기본 컴파일(JavaCompile) 시 생성됩니다.
gradle 새로 고침 후,
./gradlew clean compileJava
다음 명령어를 입력 시
해당 경로에 빌드 폴더의 경로에 클래스 파일이 생성된 것을 확인할 수 있습니다.
gradle project에서 dependencies 폴더에 querydsl 디펜던시가 제대로 추가되었는지 확인합니다. 이 부분이 없다면 의존성 추가가 제대로 되지 않은 것이니 다시 한번 확인해주세요.
댓글