개발
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