문제
- 공통 모듈에는 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 설정 추가)
- 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"
- delivery 모듈에서도 Q 클래스가 생성될 수 있도록 소스셋 지정
def generated = 'src/main/generated'
tasks.withType(JavaCompile) {
options.getGeneratedSourceOutputDirectory().set(file(generated))
}
sourceSets {
main.java.srcDirs += [generated]
}
clean {
delete file(generated)
}
- ./gradlew clean build 후, delivery 모듈 내 src/main/generated 디렉토리에 QDelivery 생성 확인
문제
원인
즉,
implementation project(":common")로 common 모듈을 의존해도, annotationProcessor 설정은 전달되지 않기 때문에 annotationProcessor는 개인적으로 설정이 필요해결 방법 (build.gradle 설정 추가)