2022-07-07 @이영훈
kotlin gradle에서 QueryDSL을 설정했던 내용을 기록으로 남깁니다.
java 쪽에서 일반적으로 사용하는 groovy gradle 버전에서는 참고할 내용이 많은데 kotlin gradle 버전은 찾는데 시간이 걸렸습니다.
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 파일이 생성된 것을 확인할 수 있습니다.