gwimong's blog Software Engineer

QueryDSL gradle 설정

QueryDSL 설정 시 유의 사항

QueryDSL?

Querydsl은 JPA, MongoDB 및 Java SQL을 포함한 여러 백엔드에 대해 유형이 안전한 SQL 유사 쿼리를 생성할 수 있는 프레임워크입니다.

쿼리를 인라인 문자열로 작성하거나 XML 파일로 외부화하는 대신 유창한 API를 통해 구성됩니다.

[홈페이지]

Gradle을 이용한 설정

querydsl 버전 정의

buildscript {
    ext {
        queryDslVersion = "5.0.0"
    }
}

의존성 설정

dependencies {
    implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
    implementation "com.querydsl:querydsl-apt:${queryDslVersion}"
    annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}"
}

Gradle plugin(com.ewerk.gradle.plugins.querydsl)을 사용하는 방법도 있으나, 해당 플러그인의 버전과 Intellij의 버전 등의 호환성으로 문제가 발생할 수도 있습니다.
참조 : [gradle] 그레이들 Annotation processor 와 Querydsl

Querydsl 설정

def querydslDir = "$buildDir/generated/querydsl"

querydsl {
    jpa = true
    querydslSourcesDir = querydslDir
}
sourceSets {
    main.java.srcDir querydslDir
}
configurations {
    querydsl.extendsFrom compileClasspath
}
compileQuerydsl {
    options.annotationProcessorPath = configurations.querydsl
}

QClass 생성 경로 등을 설정합니다.

Querydsl 빌드

Clean

gradle cleanQuerydslSourcesDir

Build

gradle compileQuerydsl

문제 해결

compileQuerydsl 빌드 실패

대부분 버전간 호환성이나 Gradle / IDE 설정이 문제인 경우가 많습니다.
이런 경우 아래 사항들을 확인해보시기 바랍니다.

  1. IDE의 Annotation 설정 확인 annotationProcessor을 사용하는 경우, IDE에서 해당 옵션을 활성해 줘야 합니다.
    img
  2. IDE의 빌드 설정 확인 Gradle의 빌가 아닌 IDE의 빌드 사용.
    img

QClass 생성 실패

test.java : error: cannot find symbol
import test.QTest;
              ^

QClass가 생성되어야 위 코드가 정상적으로 수행될텐데, 위 QTest라는 클래스가 없다며 빌드가 안되는 현상이 발생했습니다.

이러한 현상은 Class 또는 Interfaced를 정의 할 때, 상속 받는 Class나 추상 클래스의 구조가 다른 경우입니다.
( error: interface expected / Wrong number of type arguments)


Similar Posts

Comments