본문 바로가기
실무

스프링부트 3.x에서 Querydsl 설정하기

2024. 2. 21.

매번 무언가의 버전이 변경될 때마다 설정하는데 고생하는 QueryDsl. 스프링부트 3.x을 쓰고서도 한참을 헤매다가 여러 글을 참고하여 내 PC에서 돌아가는 버전을 기록해둔다.

 

Querydsl 연결을 위한 build.gradle 설정파일

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.1.5'
	id 'io.spring.dependency-management' version '1.1.3'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'

java {
	sourceCompatibility = '17'
}

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	compileOnly 'org.projectlombok:lombok'
	runtimeOnly 'com.mysql:mysql-connector-j'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'

	// QueryDsl
	implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
	annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
	annotationProcessor "jakarta.annotation:jakarta.annotation-api"
	annotationProcessor "jakarta.persistence:jakarta.persistence-api"
}

/* 없어도 돌아가는 부분
// Querydsl 설정부
def generated = 'src/main/generated'

// querydsl QClass 파일 생성 위치를 지정
tasks.withType(JavaCompile) {
	options.generatedSourceOutputDirectory = file(generated)
}

// java source set 에 querydsl QClass 위치 추가
sourceSets {
	main.java.srcDirs += "$projectDir/build/generated"
}
*/

// gradle clean 시에 QClass 디렉토리 삭제
clean {
	delete file('src/main/generated')
}

tasks.named('test') {
	useJUnitPlatform()
}

 

 

빌드 옵션을 IntelliJ로 설정해놓은 경우

  • Build Project, Rebuild, main(), 또는 테스트를 실행하면 src/main/generated 폴더에 Q객체가 생성된다.
    • clean {…} 설정을 추가하면 gradle clean시에 해당 폴더가 삭제되도록 할 수 있다.
    • Q객체가 git에 올라가지 않게 src/main/generated.gitignore에 추가하자.

 

빌드 옵션을 Gradle로 설정해놓은 경우

  • ./gradlew clean compileJava를 실행하면 build/generated 하위에 Q객체게 생성된다.
    • 인텔리제이에서는 Gradle-Tasks-build-clean & Gradle-Tasks-other-compileJave를 실행하면 동일한 동작이 수행된다.
    • gradle clean 수행 시 build 폴더 자체가 삭제된다.

댓글