728x90
Precompiled Script로 작성한 빌드 로직을 각 모듈에 적용하는 방법을 기록합니다.
아래 예제 코드는 Kotlin dsl로 Spring Boot 프로젝트를 구성합니다.
(Kotlin 2.0.0, Spring Boot 3.3.0, Gradle 8.7)
buildSrc/build.gradle.kts
내 빌드 스크립트에 외부 플러그인을 적용하려면 buildSrc/build.gradle.kts
에서 외부 플러그인 의존성을 선언합니다.
외부 의존성 내 플러그인에 적용하기
// kotlin dsl plugin을 선언합니다. 따옴표가 아닌, 벡틱입니다.
plugins {
`kotlin-dsl`
}
repositories {
gradlePluginPortal()
}
dependencies {
implementation("org.springframework.boot:spring-boot-gradle-plugin:3.3.0")
implementation("io.spring.gradle:dependency-management-plugin:1.1.5")
implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:2.0.0")
implementation("org.jetbrains.kotlin:kotlin-allopen:2.0.0")
}
buildSrc/src/main/kotlin/common-convetions.gradle.kts
각 모듈이 공유할 빌드 스크립트를 선언합니다.
애플리케이션 빌드시점에 buildSrc 하위에 작성한 빌드 스크립트가 가장 먼저 실행됩니다.
import org.gradle.api.JavaVersion
import org.gradle.api.tasks.testing.Test
import org.gradle.kotlin.dsl.*
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
id("org.springframework.boot")
id("io.spring.dependency-management")
kotlin("jvm")
kotlin("plugin.spring")
}
group = "com.honeyjoojoo"
version = "0.0.1-SNAPSHOT"
java {
sourceCompatibility = JavaVersion.VERSION_21
}
configurations {
compileOnly {
extendsFrom(configurations.annotationProcessor.get())
}
}
repositories {
mavenCentral()
}
extra["springCloudVersion"] = "2023.0.2"
dependencyManagement {
imports {
mavenBom("org.springframework.cloud:spring-cloud-dependencies:${property("springCloudVersion")}")
}
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter")
implementation("org.jetbrains.kotlin:kotlin-reflect")
developmentOnly("org.springframework.boot:spring-boot-devtools")
annotationProcessor("org.springframework.boot:spring-boot-configuration-processor")
testImplementation("org.springframework.boot:spring-boot-starter-test")
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
}
kotlin {
compilerOptions {
apiVersion.set(KotlinVersion.KOTLIN_2_0)
jvmTarget.set(JvmTarget.JVM_21)
freeCompilerArgs.add("-Xjsr305=strict")
}
}
tasks.withType<Test> {
useJUnitPlatform()
}
api/build.gradle.kts
plugins {
id("common-conventions")
}
dependencies {
implementation(project(":application"))
implementation("org.springframework.boot:spring-boot-starter-validation")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
}
gateway/build.gradle.kts
plugins {
id("common-conventions")
}
dependencies {
implementation("org.springframework.cloud:spring-cloud-starter-circuitbreaker-resilience4j")
implementation("org.springframework.cloud:spring-cloud-starter-gateway")
implementation("org.springframework.boot:spring-boot-starter-oauth2-client")
}
'Framework | Library | Tool > tool' 카테고리의 다른 글
Homebrew 유용한 명령어 (0) | 2023.01.01 |
---|---|
Gradle 멀티 모듈 길라잡이 (0) | 2022.07.04 |