Skip to content

[Troubleshooting] QueryDSL Q 클래스가 생성되지 않는 문제 #187

@Jungdaye89

Description

@Jungdaye89

문제

  • 공통 모듈에는 Q 클래스가 잘 생성되지만, delivery 모듈에 있는 엔티티에 대한 Q 클래스(QDelivery)가 생성되지 않음
  • 빌드 시 에러는 없으나, 소스 코드에서 QDelivery.delivery를 참조하면 “cannot resolve symbol”과 같은 문제가 발생

원인

  • QueryDSL Annotation Processor는 각 모듈에 대해 독립적으로 동작
  • delivery 모듈에 Annotation Processor 설정이 없으므로, delivery 모듈 내 엔티티는 Q 클래스를 생성하지 않음

즉, implementation project(":common")로 common 모듈을 의존해도, annotationProcessor 설정은 전달되지 않기 때문에 annotationProcessor는 개인적으로 설정이 필요

해결 방법 (build.gradle 설정 추가)

  1. QueryDSL 의존성 및 Annotation Processor 설정 추가
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"
  1. delivery 모듈에서도 Q 클래스가 생성될 수 있도록 소스셋 지정
def generated = 'src/main/generated'
tasks.withType(JavaCompile) {
    options.getGeneratedSourceOutputDirectory().set(file(generated))
}
sourceSets {
    main.java.srcDirs += [generated]
}
clean {
    delete file(generated)
}
  1. ./gradlew clean build 후, delivery 모듈 내 src/main/generated 디렉토리에 QDelivery 생성 확인

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions