build.gradle.kts
plugins {
java
id("org.springframework.boot") version "3.0.5"
id("io.spring.dependency-management") version "1.1.0"
}
group = "wononly.log"
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-web")
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.boot:spring-boot-starter-validation")
implementation("org.springframework.boot:spring-boot-starter-data-redis")
implementation("org.springframework.boot:spring-boot-starter-websocket")
implementation("org.springframework.boot:spring-boot-starter-security")
implementation("org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE")
implementation("com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.5")
implementation("org.apache.commons:commons-lang3:3.12.0")
implementation("org.apache.commons:commons-collections4:4.4")
compileOnly(group = "io.jsonwebtoken", name = "jjwt-api", version = "0.11.2")
runtimeOnly(group = "io.jsonwebtoken", name = "jjwt-impl", version = "0.11.2")
runtimeOnly(group = "io.jsonwebtoken", name = "jjwt-jackson", version = "0.11.2")
developmentOnly("org.springframework.boot:spring-boot-devtools")
runtimeOnly("com.h2database:h2")
runtimeOnly("org.postgresql:postgresql")
implementation("com.querydsl:querydsl-jpa:5.0.0:jakarta")
implementation("com.querydsl:querydsl-sql:5.0.0")
annotationProcessor("com.querydsl:querydsl-apt:5.0.0:jakarta")
compileOnly("org.projectlombok:lombok")
annotationProcessor("org.projectlombok:lombok")
annotationProcessor("jakarta.annotation:jakarta.annotation-api")
annotationProcessor("jakarta.persistence:jakarta.persistence-api")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
tasks.withType<Test> {
useJUnitPlatform()
}
springBoot {
mainClass.set("com.companywe.xergy.csms.api.Application")
}
val querydslDir = "$buildDir/generated/sources/annotationProcessor"
sourceSets {
main {
java.srcDirs("src/main/java", querydslDir)
}
}
tasks.withType<JavaCompile> {
options.generatedSourceOutputDirectory.file(querydslDir)
// 다른 자바 버전에서도 사용할 수 있도록 java.annotation.Generated 로 import 하도록 설정하는 코드
options.compilerArgs.add("-Aquerydsl.generatedAnnotationClass=javax.annotation.Generated")
}
tasks {
getByName<Delete>("clean") {
delete.add(querydslDir) // add accepts argument with Any type
}
}
QueryDsl 사용을 위한 디펜더시 추가
implementation("com.querydsl:querydsl-jpa:5.0.0:jakarta")
implementation("com.querydsl:querydsl-sql:5.0.0")
annotationProcessor("com.querydsl:querydsl-apt:5.0.0:jakarta")
QueryDsl 빌드 옵션 추가
val querydslDir = "$buildDir/generated/sources/annotationProcessor"
sourceSets {
main {
java.srcDirs("src/main/java", querydslDir)
}
}
// 컴파일시 querydslDir 위치에 Qfile 생성되도록 설정
tasks.withType<JavaCompile> {
options.generatedSourceOutputDirectory.file(querydslDir)
// 다른 자바 버전에서도 사용할 수 있도록 java.annotation.Generated 로 import 하도록 설정
options.compilerArgs.add("-Aquerydsl.generatedAnnotationClass=javax.annotation.Generated")
}
tasks { // build.clean 하는 경우 Qfile 삭제 될 수 있도록 설정
getByName<Delete>("clean") {
delete.add(querydslDir)
}
}
SpringBoot 프로젝트 환경 셋팅시 kotlin gradle 파일 예시중 QueyrDsl 설정 예시가
많이 없어서 gradle groovy 파일에서의 QueryDsl 설정을 마이그레이션 하는데 시간을 들였다.
그렇다면 내가 예시가 많은 groovy gradle 대신 kotlin gradle을 사용한 이유는?
kotlin의 아래와 같은 장점 때문!