Gradle에 변수를 선언하는 방법이 여러 가지 있다.
- gradle.properties - 전역 변수 설정
- settings.gradle.kts - 빌드 구성용 변수 설정
- build.gradle.kts (root) - 하위 모듈에 전달할 변수 설정
- build.gradle.kts (sub) - 로컬 변수 설정
1) 전역변수 설정 (gradle.properties)
javaVersion=21
jacksonVersion=2.19.0
junitVersion=5.13.3
위처럼 써두면 전체 빌드과정에서 가져다 쓸 수 있다.
그리고 이 변수는 Gradle Project Property(-P)로 덮어쓸 수 있다.
ex>./gradlew build -PjavaVersion=17
settings.gradle.kts
val springBootVersion: String by settings
build.gradle.kts(root, sub)
// 직접 쓰거나
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(${project.property("javaVersion")}))
}
}
// 변수로 쓰거나
val javaVersion: String by project
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(javaVersion))
}
}
2) 빌드 구성용 변수 설정 (settings.gradle.kts)
val springBootPluginVersion = "3.5.0"
pluginManagement {
plugins {
id("org.springframework.boot") version springBootPluginVersion
}
repositories {
gradlePluginPortal()
mavenCentral()
}
}
rootProject.name = "my-service"
include("api", "core", "batch")
모든 모듈에서 사용할 플러그인의 버전을 한 번에 관리.
프로젝트의 이름, 구조를 설정하는 데 사용
빌드 설정 초기화 단계인 settings.gradle.kts안에서만 사용하는 경우가 일반적.
build.gradle.kts에서 직접 접근할 수 없다.
하지만, 아래와 같이 settings.gradle.kts에 설정할 경우 build.gradle.kts에서 접근 가능.
gradle.rootProject {
extra["key1"] = "value1"
extra["key2"] = "value2"
}
위처럼 설정할 경우 아래처럼 가져다 씀.
val value1 = rootProject.extra["key1"] as String
val value2 = rootProject.extra["key2"] as String
이는 Gradle 확장 속성(ExtraPropertiesExtension)에 값을 넣어서 넘겨주는 방식.
주의해야 할 점은 extra는 동적 속성이기 때문에, 자동완성 기능이 없고, 런타임 오류 가능성이 존재한다.
특별한 이유가 없다면, gradle.properties를 활용하는 편이 일반적이다.
3) 하위 모듈에 전달할 변수 설정 - build.gradle.kts (root)
val exampleVersion = "3.5.15"
subprojects {
dependencies {
implementation("com.example:example:$exampleVersion")
}
}
멀티 모듈 환경에서 하위 모듈 공통으로 사용할 버전이 있다면 사용할 수 있다.
이 또한, gradle.properties를 활용하는 편이 일반적이다.
4) 로컬 변수 설정 - build.gradle.kts (sub)
val localVersion = "1.2.3"
dependencies {
implementation("com.example:feature:$localVersion")
}
멀티 모듈 환경에서 특정 모듈에서만 사용해야 하는 고립된 버전이나 옵션이 있다면 사용.
'Gradle' 카테고리의 다른 글
| [개발자의 Gradle] Configurations? 누구냐 너! -1 (1) | 2025.08.01 |
|---|---|
| [Gradle] 설정 파일 구조 완전 정복! (4) | 2025.07.15 |
| [Gradle] Phase (1) | 2025.07.10 |
| [Gradle] Gradle Task, 왜 이렇게 많고 헷갈리는 거야? (1) | 2025.07.09 |
| [Gradle] groovy가 좋은거예요? kotlin이 좋은거예요? (0) | 2025.06.09 |