Files
blog-backend/build.gradle.kts
박원엽 3042dc898e
Some checks failed
Deploy Blog Backend / test (push) Successful in 2m6s
Deploy Blog Backend / deploy (push) Failing after 1m8s
Add Maia chess gameplay and deployment
2026-06-19 14:49:20 +09:00

132 lines
4.5 KiB
Kotlin

plugins {
kotlin("jvm") version "1.9.25"
kotlin("plugin.spring") version "1.9.25"
kotlin("plugin.jpa") version "1.9.25"
kotlin("kapt") version "1.9.25"
id("org.springframework.boot") version "3.5.9"
id("io.spring.dependency-management") version "1.1.7"
}
group = "me.wypark"
version = "0.0.1-SNAPSHOT"
description = "blog-backend"
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21) // Java 21 굿!
}
}
repositories {
mavenCentral()
}
val springCloudAwsVersion = "3.2.1"
dependencies {
// 1. Standard Spring Boot Starters
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.boot:spring-boot-starter-security")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.springframework.boot:spring-boot-starter-data-redis")
implementation("org.springframework.boot:spring-boot-starter-validation")
implementation("org.springframework.boot:spring-boot-starter-mail")
implementation("org.flywaydb:flyway-core")
implementation("org.flywaydb:flyway-database-postgresql")
implementation("io.github.cdimascio:dotenv-java:3.0.0")
// 2. Kotlin Modules
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
implementation("org.jetbrains.kotlin:kotlin-reflect")
// 3. Database Drivers
runtimeOnly("org.postgresql:postgresql")
// 4. AWS S3 / MinIO
implementation("io.awspring.cloud:spring-cloud-aws-starter-s3:$springCloudAwsVersion")
// 5. QueryDSL
implementation("com.querydsl:querydsl-jpa:5.1.0:jakarta")
kapt("com.querydsl:querydsl-apt:5.1.0:jakarta")
kapt("jakarta.persistence:jakarta.persistence-api")
kapt("jakarta.annotation:jakarta.annotation-api")
// 6. JWT (0.12.x)
implementation("io.jsonwebtoken:jjwt-api:0.12.3")
runtimeOnly("io.jsonwebtoken:jjwt-impl:0.12.3")
runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.12.3")
// 7. Test & Dev
developmentOnly("org.springframework.boot:spring-boot-devtools")
testImplementation("org.springframework.boot:spring-boot-starter-test")
testImplementation("org.jetbrains.kotlin:kotlin-test-junit5")
testImplementation("org.springframework.security:spring-security-test")
testRuntimeOnly("com.h2database:h2")
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
}
kotlin {
compilerOptions {
freeCompilerArgs.addAll("-Xjsr305=strict")
}
}
allOpen {
annotation("jakarta.persistence.Entity")
annotation("jakarta.persistence.MappedSuperclass")
annotation("jakarta.persistence.Embeddable")
}
tasks.withType<Test> {
useJUnitPlatform()
}
val compileKotlinTask = tasks.named("compileKotlin")
val tempBuildDir = providers.provider {
file(System.getenv("BLOG_BACKEND_ASCII_BUILD_DIR") ?: "${System.getenv("TEMP") ?: layout.buildDirectory.get().asFile.absolutePath}/blog-backend-build")
}
val javacKotlinClassesDir = providers.provider {
tempBuildDir.get().resolve("kotlin-main-classes")
}
val syncKotlinClassesForJavac = tasks.register<Sync>("syncKotlinClassesForJavac") {
dependsOn(compileKotlinTask)
from(compileKotlinTask.map { it.outputs.files })
into(javacKotlinClassesDir)
}
tasks.named<JavaCompile>("compileJava") {
dependsOn(syncKotlinClassesForJavac)
classpath = files(javacKotlinClassesDir) + configurations.compileClasspath.get()
options.isIncremental = false
}
val mainRuntimeClassesDir = providers.provider {
tempBuildDir.get().resolve("main-runtime-classes")
}
val testRuntimeClassesDir = providers.provider {
tempBuildDir.get().resolve("test-runtime-classes")
}
val syncMainClassesForTestRuntime = tasks.register<Sync>("syncMainClassesForTestRuntime") {
dependsOn(tasks.named("classes"))
from(layout.buildDirectory.dir("classes/kotlin/main"))
from(layout.buildDirectory.dir("classes/java/main"))
from(layout.buildDirectory.dir("resources/main"))
into(mainRuntimeClassesDir)
}
val syncTestClassesForTestRuntime = tasks.register<Sync>("syncTestClassesForTestRuntime") {
dependsOn(tasks.named("testClasses"))
from(layout.buildDirectory.dir("classes/kotlin/test"))
from(layout.buildDirectory.dir("classes/java/test"))
from(layout.buildDirectory.dir("resources/test"))
into(testRuntimeClassesDir)
}
tasks.withType<Test> {
dependsOn(syncMainClassesForTestRuntime, syncTestClassesForTestRuntime)
testClassesDirs = files(testRuntimeClassesDir)
classpath = files(testRuntimeClassesDir, mainRuntimeClassesDir) + classpath
}