[gradle] 멀티 모듈 프로젝트에서 코어 모듈의 변수 공유하기

최대한·2022년 12월 2일
0

프로젝트 구조

└── gradle-core-variable-share/
    ├── api/
    │   └── build.gradle.kts
    ├── shared/
    │   └── build.gradle.kts
    └── settings.gradle.kts

1.settings.gradle.kts (부모 프로젝트)

pluginManagement {
    repositories {
        mavenCentral()
    }
}
rootProject.name = "gradle-core-variable-share"
include("shared", "api")

2. build.gradle.kts (shared 모듈)

tasks.register("shared-task") {
    val sharedMap = mutableMapOf(
        "name" to "Max",
        "age" to 31,
    )
    println("sharedMap in shared-task: $sharedMap")
    rootProject.ext.set("sharedMap", sharedMap)
}

3. build.gradle.kts (api 모듈)

plugins {
    id("java")
}

tasks.register("api-task") {
    dependsOn(":shared:shared-task")
    doFirst {
        val sharedMap = rootProject.ext.get("sharedMap") as MutableMap<String, Any>
        println("sharedMap in api-task: $sharedMap")
    }
}

Gradle run

./gradlew :api:api-task
> Configure project :shared
sharedMap in shared-task: {name=Max, age=31}

> Task :api:api-task
sharedMap in api-task: {name=Max, age=31}

BUILD SUCCESSFUL in 1s
1 actionable task: 1 executed

위에서 본 것처럼 dependsOn 함수를 사용하여 task 간에 순서를 정해줄 수 있습니다. 주의할 점은 api-task안에서 수행할 내용은 doFirst 혹은 doLast dsl 안에서 수행해줘야 한다는 것입니다. 위 코드는 아래 github 에서 참조하실 수 있습니다.

Reference

profile
Awesome Dev!

0개의 댓글