목차
  1. 개요
728x90

 

개요

오늘 멀티 모듈로 구성된 Spring Boot 프로젝트에서 QueryDSL을 사용하려다 다음과 같은 오류에 직면했습니다.

/Users/zinu/Dev/project2/SpartaLogistics/com.sparta.logistics.client.hub/build/generated/sources/annotationProcessor/java/main/com/sparta/logistics/client/hub/model/QHub.java:23: error: cannot find symbol
    public final com.sparta.logistics.common.model.QTimestamped _super = new com.sparta.logistics.common.model.QTimestamped(this);
                                                  ^
  symbol:   class QTimestamped
  location: package com.sparta.logistics.common.model

 

이 오류는 Timestamped 클래스가 있는 common 모듈에서 QueryDSLQ-type 클래스를 생성하지 못해 발생했습니다.

 

원인 분석

 

  1. 프로젝트가 멀티 모듈로 구성되어 있음
  2. Timestamped 클래스가 common 모듈에 위치
  3. 다른 모듈(예: hub 모듈)에서 Timestamped 클래스상속받아 사용
  4. common 모듈QueryDSL 설정이 되어있지 않음

 

따라서 common 모듈에 QueryDSL 의존성을 추가했습니다. 그런데도 Q클래스가 생성되지 않았습니다. 그 이유는 하위 모듈에서 공통 모듈을 참조하지 않았다는 점이었습니다. 멀티 모듈 프로젝트에서는 모듈 간의 의존성 설정이 매우 중요합니다.

 

dependencies {
    implementation project(':common')
    // 기타 의존성...
}

 

위와 같이 공통 모듈을 참조하는 의존성을 추가합니다.

./gradlew clean build

 

그리고  전체 프로젝트를 리빌드하면 다음과 같이 Q클래스가 정상적으로 생성된 것을 확인할 수 있습니다.