Programing/Java & Spring

[Spring] QueryDsl 설정 및 Q파일 생성 안되는 이슈 해결(Gradle 8.x 이상 설정 방법)

세기루민 2024. 11. 10. 20:29
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