// QueryDSL 설정, 실제 QClass 코드를 생성하는 본체
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
// JPA에서 사용하는 어노테이션(@Entity, @Id 등 해석용)
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
// 표준 이름표를 제공함, 생성된 파일 상단에 @Generated 표시를 남김
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
// 엔티티를 분석하여 QueryDSL 전용 쿼리 클래스를 자동 생성
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
def querydslDir = layout.buildDirectory.dir("generated/querydsl").get().asFile
sourceSets {
main.java.srcDirs += [ querydslDir ]
}
tasks.withType(JavaCompile).configureEach {
options.getGeneratedSourceOutputDirectory().set(querydslDir)
}
-> 엔티티 이름을 바꾸거나 패키지 위치를 옮겼을 때, 예전에 만들어진 QClass 파일이 그대로 남아있으면 중복 클래스 에러를 내뱉는다.
clean {
delete querydslDir
}
dependencies {
// QueryDSL 설정, 실제 QClass 코드를 생성하는 본체
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
// JPA에서 사용하는 어노테이션(@Entity, @Id 등 해석용)
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
// 표준 이름표를 제공함, 생성된 파일 상단에 @Generated 표시를 남김
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
// 엔티티를 분석하여 QueryDSL 전용 쿼리 클래스를 자동 생성
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
}
// QClass가 생성될 위치 지정
def querydslDir = layout.buildDirectory.dir("generated/querydsl").get().asFile
// 해당 경로를 소스셋(SourceSet)에 추가하여 IDE가 인식하게 함
sourceSets {
main.java.srcDirs += [querydslDir]
}
// 컴파일 시 생성된 소스파일의 위치를 위에서 저장한 곳으로 고정
tasks.withType(JavaCompile).configureEach {
options.getGeneratedSourceOutputDirectory().set(querydslDir)
}
// clean 작업 시 생성된 QClass 폴더도 함께 삭제
clean {
delete querydslDir
}