개발
home
⚗️

kotlin gradle에서 queryDSL 설정하기

Created
2022/07/07
Tags
Kotlin
Gradle
QueryDSL
2022-07-07 @이영훈
kotlin gradle에서 QueryDSL을 설정했던 내용을 기록으로 남깁니다.
java 쪽에서 일반적으로 사용하는 groovy gradle 버전에서는 참고할 내용이 많은데 kotlin gradle 버전은 찾는데 시간이 걸렸습니다.
 Spring Boot 3.x 버전에서 kotlin gradle의 queryDSL을 설정하신다면, 아래의 글을 참고해주세요

Kotlin Gradle 파일

build.gradle.kts 전체 파일입니다.
 로 표시한 내용을 주의 깊게 보시면 됩니다.
// build.gradle.kts import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { val kotlinVersion = "1.6.21" id("org.springframework.boot") version "2.7.0" id("io.spring.dependency-management") version "1.0.11.RELEASE" kotlin("jvm") version kotlinVersion kotlin("plugin.spring") version kotlinVersion kotlin("plugin.jpa") version kotlinVersion // ✅ KAPT(Kotlin Annotation Processing Tool)를 설치합니다 kotlin("kapt") version kotlinVersion // ✅ Intellij에서 사용할 파일을 생성하는 플러그인입니다 idea } group = "me.leedo" version = "0.0.1-SNAPSHOT" java.sourceCompatibility = JavaVersion.VERSION_17 configurations { compileOnly { extendsFrom(configurations.annotationProcessor.get()) } } repositories { mavenCentral() } dependencies { implementation("org.springframework.boot:spring-boot-starter-security") implementation("org.springframework.boot:spring-boot-starter-web") implementation("com.fasterxml.jackson.module:jackson-module-kotlin") implementation("org.springframework.boot:spring-boot-starter-data-jpa") implementation("org.jetbrains.kotlin:kotlin-reflect") implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") // ✅ querydsl을 설치합니다 implementation("com.querydsl:querydsl-jpa:5.0.0") // ✅ KAPT(Kotlin Annotation Processing Tool)를 설정합니다 // kotlin 코드가 아니라면 kapt 대신 annotationProcessor를 사용합니다 // JPAAnnotationProcessor를 사용하기 위해 마지막에 :jpa를 붙입니다 kapt("com.querydsl:querydsl-apt:5.0.0:jpa") annotationProcessor("org.springframework.boot:spring-boot-configuration-processor") testImplementation("org.springframework.boot:spring-boot-starter-test") testImplementation("org.springframework.security:spring-security-test") } tasks.withType<KotlinCompile> { kotlinOptions { freeCompilerArgs = listOf("-Xjsr305=strict") jvmTarget = "17" } } tasks.withType<Test> { useJUnitPlatform() } tasks.getByName<Jar>("jar") { enabled = false } // ✅ QClass를 Intellij가 사용할 수 있도록 경로에 추가합니다 idea { module { val kaptMain = file("build/generated/source/kapt/main") sourceDirs.add(kaptMain) generatedSourceDirs.add(kaptMain) } }
Bash
복사
kapt("com.querydsl:querydsl-apt:5.0.0:jpa") 는 JPAAnnotationProcessor를 적용하는 부분입니다. 공식문서에 JPAAnnotationProcessor를 다음과 같이 소개하고 있습니다.
The JPAAnnotationProcessor finds domain types annotated with the javax.persistence.Entity annotation and generates query types for them.
JPAAnnotationProcessor는 @Entity 어노테이션이 붙은 도메인을 찾아서 해당 도메인의 쿼리 타입을 생성합니다.

JpaQueryFactory 빈 설정하기

@Configuration class JpaQueryFactoryConfig { @PersistenceContext private lateinit var entityManager: EntityManager @Bean fun jpaQueryFactory() = JPAQueryFactory(entityManager) }
Kotlin
복사

Generate QClasses

다음 gradle 명령어를 실행해서 Querydsl의 도메인 클래스인 QClass를 생성합니다
./gradlew clean compileKotlin
Bash
복사
정상적으로 QClass 파일이 생성된 것을 확인할 수 있습니다.

ref