728x90
최근에 Java 17, Spring 3.x 버전으로 개발을 진행하면서..
QueryDsl 설정이 안되어 삽질을 좀 했었다.
이에 따라 삽질을 최소화 하기 위해 글을 남겨보려고 함
1. Gradle Version 확인 필요
우선 Gradle Version이 8.x 이상일 경우 아래의 의존성을 추가하면 안된다.
id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10'
해당 의존성을 추가할 경우 아래의 문구를 만나게 된다.
The AbstractCompile.destinationDir property has been deprecated. This is scheduled to be removed in Gradle 9.0. Please use the destinationDirectory property instead.
해당 문구를 해석해보면 Gradle 9.x 버전이 필요하다는데...
현재 9.x 버전이 안나온 걸로 알고 있고 이에 따라 찾아보니 Gradle Version 7.x 이상부터는 해당 의존성은 지원하지 않는다고 함
2. Gradle 8.x 이상 QueryDsl 설정 방법
buildscript {
ext {
queryDslVersion = "5.0.0"
}
}
plugins {
id 'java'
id 'org.springframework.boot' version '3.3.0'
id 'io.spring.dependency-management' version '1.1.6'
// id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10'
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
repositories {
mavenCentral()
maven { url 'https://repo.spring.io/milestone' }
maven { url 'https://repo.spring.io/snapshot' }
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
runtimeOnly 'com.mysql:mysql-connector-j'
// lombok
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
// Spring boot 3.x이상에서 QueryDsl 패키지를 정의하는 방법
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"
}
// QueryDsl QClass 디렉토리 경로
def querydslDir = "$buildDir/generated/querydsl"
// Java Source Set에 QClass 위치 추가(QClass를 컴파일 가능하도록 함)
sourceSets {
main.java.srcDirs += [ querydslDir ]
}
// QClass 생성을 위한 설정
tasks.withType(JavaCompile) {
options.annotationProcessorGeneratedSourcesDirectory = file(querydslDir)
}
// clean 작업 후 querydslDir 디렉토리 삭제
clean.doLast {
file(querydslDir).deleteDir()
}
위와 같이 설정이 필요하다.
Java 17.x 이상인 경우에는 jakarta를 이용해야 함으로 의존성도 jakarta 의존성으로 변경해준다.
(Java 11 이하인 경우에는 jakarta를 빼면 된다.)
추가로 QueryDir에 대한 설정은 부가적인 설정인데
개인적으로 설정하는 것을 추천한다.
728x90
'Programing > Java & Spring' 카테고리의 다른 글
[JPA&QueryDSL] QueryDsl이란 무엇인가? (4) | 2024.11.24 |
---|---|
[Spring] 정의되지 않은 요청 파라미터에 대한 유효성 검증 및 Jackson 과 @EnableWebMvc의 관계성 (2) | 2024.11.12 |
[MacOS] OpenJdk 17 -> temurin 17로 변경하기 (1) | 2024.10.06 |
[Spring] Utility Class에 대해서는 Static Method로 구성하는 것이 좋을까? (1) | 2024.09.11 |
[Spring] TimeZone에 대해 활용해보자 (0) | 2024.08.21 |