[Java / Kotlin] QueryDSL 설정
임근수
2 min read
기존 mybatis 설정 및 구현되어있던 부분을 점점 JPA 전환하기 위해 작업하면서 필요에 따라 QueryDSL 사용도 필요 할것으로 예상되어 (물론 QueryDsl 구현부도 존재합니다.) 설정한 부분을 기록하고자 합니다.
파트는 maven / gradle 로 정리해볼까 합니다.
공통적으로 Qtable 사용을 위한 classpath 내 빌드 위치가 필요했구요.. QueryDSL사용 해보신 분들은 아시겠지만 빌드 안되어 있을때 소스파일내에 오류 등 약간(?) 불편한 부분도 없지 않아 있겠습니다. (적응하면 크게 어렵진 않겠지만요 ㅎㅎ)
Maven 설정
maven apt 설정(kotlin + java 구성되어 있어 java 로 생성된 코드에만 Qtable 생성가능하도록)
- maven (spring boot 2.x) 였습니다.
<plugins>
...
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>1.1.3</version>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources/java</outputDirectory>
<processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
[프로젝트내 Qtable 생성화면]
Gradle 설정
- Gradle
gradle kapt 설정 (kapt 버전이 더이상 증가되진 않지만…. KSP 에서 테스트 및 검증 이후 상용화 결정예정)
https://developer.android.com/studio/build/migrate-to-ksp?hl=ko
spring boot 3.x + kspt : 신규 프로젝트에 적용하였습니다. (spring boot 3.x)
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
buildscript {
dependencies {
classpath("gradle.plugin.com.ewerk.gradle.plugins:querydsl-plugin:1.0.10")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.21")
classpath("org.jetbrains.kotlin:kotlin-allopen:1.7.21")
classpath("org.jetbrains.kotlin:kotlin-noarg:1.7.21")
}
}
plugins {
id("org.springframework.boot") version "3.1.0"
id("io.spring.dependency-management") version "1.1.0"
kotlin("jvm") version "1.8.21"
kotlin("plugin.spring") version "1.8.21"
kotlin("kapt") version "1.8.22" //Querydsl
idea
}
allOpen {
annotation("jakarta.persistence.Entity")
annotation("jakarta.persistence.MappedSuperclass")
annotation("jakarta.persistence.Embeddable")
}
group = "com.crypted.kssupport"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_17
repositories {
mavenCentral()
//mavenLocal() dev test 용도
maven {
url = uri("<https://maven.pkg.github.com/kstadium/ks-common-java>")
credentials {
username = project.findProperty("gpr.user") as String? ?: System.getenv("USERNAME")
password = project.findProperty("gpr.key") as String? ?: System.getenv("TOKEN")
}
}
}
dependencies {
[... 중략]
}
idea {
module {
val kaptMain = file("build/generated/source/kapt/main")
sourceDirs.add(kaptMain)
generatedSourceDirs.add(kaptMain)
}
}
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs = listOf("-Xjsr305=strict")
jvmTarget = "17"
}
}
0
Subscribe to my newsletter
Read articles from 임근수 directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by