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 파일이 생성된 것을 확인할 수 있습니다.