Gradle 동작 또는 특정 Gradle 프로젝트에서의 환경 설정을 구성 할 수 있는 여러 가지 메커니즘을 제공합니다.
Gradle의 동작을 구성할 때는 각 메커니즘의 우선 순위가 높은 것(오름차순)이 먼저 결정됩니다.
우선 순위 | 구분 | 비고 | 예시 |
1 | Command-line flags | 프로퍼티(Properties)와 환경 변수(Envrionment variables)보다 앞서는 규칙입니다. 자세한 내용은 Gradle document: Command-Line Interface를 참고합니다. |
--build-cache |
2 | System properties | 루트 프로젝트 디렉토리의 |
systemProp.http.proxyHost=somehost.org |
3 | Gradle properties | 프로젝트 디렉토리 또는 |
org.gradle.caching=true |
4 | Environment variables | Gradle을 실행하는 환경에서 제공합니다. | GRADLE_OPTS |
프로퍼티(gradle.properties) 파일에서 Gradle 프로퍼티 적용
Gradle은 자바 프로세스 빌드를 위해 사용 할 수 있는 몇 가지 옵션을 제공합니다.
예를 들면 GRADLE_OPTS 또는 JAVA_OPTS 로컬 변수를 사용 할 수 있으며, JVM 메모리 설정과 JAVA_HOME 위치와 같은 환경 구성 역시 가능합니다.
이렇게 구성된 gradle.properties 파일은 Git과 같은 버전 관리 툴에 저장하여 팀 단위에서 일관된 작업이 가능합니다.
Gradle properties 추가를 위해 gradle.properties 파일을 다음과 같이 수정합니다.
gradlePropertiesProp=gradlePropertiesValue
gradleProperties.with.dots=gradlePropertiesDottedValue
settings.gradle.kts와 build.gradle.kts 파일에서는 Configuration time에 엑세스합니다.
/**
* settings.gradle.kts
*/
// Using the API, provides a lazy Provider<String>
println("Configuration time: " + providers.gradleProperty("gradlePropertiesProp").get())
// Using Kotlin delegated properties on `project`
val gradlePropertiesProp: String by settings
println("Configuration time: " + gradlePropertiesProp)
/**
* build.gradle.kts
*/
// Using the API, provides a lazy Provider<String>
println("Configuration time: " + providers.gradleProperty("gradlePropertiesProp").get())
// Using Kotlin delegated properties on `project`
val gradlePropertiesProp: String by project
println("Configuration time: " + gradlePropertiesProp)
코드 | 비고 | |
Configuration time에 Gradle properties에 엑세스합니다. | ||
예시의 구문 String by settings와 String by project는 Gradle Kotlin DSL의 Kotlin delegated properties입니다.
이 구문에서 String과 같은 타입을 명시해야 하며, 만약 프로퍼티가 존재하는지에 따라 분기해야 한다면 Null을 체크하기 위해 String?을 사용합니다.
build.gradle.kts 파일에서는 Runtime에 엑세스합니다.
tasks.named<Test>("test") {
// Use JUnit Platform for unit tests.
useJUnitPlatform()
println("Runtime: " + providers.gradleProperty("gradlePropertiesProp").get())
}
명령줄에서 ./gradlew test를 수행하고 결과를 확인합니다.
$ ./gradlew test
Configuration time: gradlePropertiesValue
Configuration time: gradlePropertiesValue
Runtime: gradlePropertiesValue
...
BUILD SUCCESSFUL in 714ms
3 actionable tasks: 3 up-to-date
initialization scripts는 Gradle properties에 직접 접근 할 수 없습니다. 프로퍼티에 접근 할 수 있는 가장 빠른 시점은 settingsEvaluated { } 입니다.
init.gradle.kts 파일에서 다음과 같이 작성하고 테스트합니다.
settingsEvaluated {
// Using the API, provides a lazy Provider<String>
println(providers.gradleProperty("gradlePropertiesProp").get())
// Using Kotlin delegated properties on `settings`
val gradlePropertiesProp: String by this
println(gradlePropertiesProp)
}
명령줄(Command-Line)을 사용한 Gradle 프로퍼티 적용
명령줄 -D 옵션을 사용해 Gradle properties를 적용합니다.
명령줄로 전달된 프로퍼티는 gradle.properties 파일보다 높은 우선순위로 취급됩니다.
$ ./gradlew test -DgradlePropertiesProp=commandLineValue
Configuration time: gradlePropertiesValue
Configuration time: gradlePropertiesValue
Runtime: gradlePropertiesValue
...
BUILD SUCCESSFUL in 805ms
3 actionable tasks: 3 up-to-date
정리 및 복습
Gradle 프로퍼티(Gradle properties)를 사용하면 자바 프로세스를 빌드하기 위한 옵션 등을 사용 할 수 있습니다.- Gradle properties는
gradle.properties파일에 작성 또는명령줄 -D옵션을 사용합니다. - initialization scripts는 Gradle properties에 직접 접근 할 수 없습니다.
init.gradle.kts파일에서 프로퍼티에 접근 할 수 있는 가장 빠른 시점은settingsEvaluated { }입니다.
'Build > Gradle' 카테고리의 다른 글
Gradle 도큐먼트: 명령줄 인터페이스(Command-Line Interface) 기본 사용법 (0) | 2023.11.21 |
---|---|
Gradle 도큐먼트: 환경 변수(Environment variables)를 사용한 빌드 환경 구성 (0) | 2023.11.21 |
Gradle 도큐먼트: 시스템 프로퍼티(System properties)를 사용한 빌드 환경 구성 (0) | 2023.11.17 |
"Cannot add task 'wrapper' as a task with that name already exists" 오류 (0) | 2023.11.17 |
Gradle 도큐먼트: 빌드 최적화를 위한 로컬 빌드 캐시(Local build cache)와 원격 빌드 캐시(Remote build cache) (0) | 2023.11.16 |