본문 바로가기

Build/Gradle

Gradle 도큐먼트: Gradle 프로퍼티(Gradle properties)를 사용한 빌드 환경 구성

더보기

Gradle 동작 또는 특정 Gradle 프로젝트에서의 환경 설정을 구성 할 수 있는 여러 가지 메커니즘을 제공합니다.

Gradle의 동작을 구성할 때는 각 메커니즘의 우선 순위가 높은 것(오름차순)이 먼저 결정됩니다.

우선 순위 구분 비고 예시
1 Command-line flags 프로퍼티(Properties)와 환경 변수(Envrionment variables)보다 앞서는 규칙입니다.
자세한 내용은 Gradle document: Command-Line Interface를 참고합니다.
--build-cache
2 System properties 루트 프로젝트 디렉토리의 gradle.properties 파일로 관리됩니다. systemProp.http.proxyHost=somehost.org
3 Gradle properties 프로젝트 디렉토리 또는 GRADLE_USER_HOME 디렉토리의
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.ktsbuild.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)
코드 비고
Line 1:10 settings.gradle.kts Configuration time에 Gradle properties에 엑세스합니다.
Line 14:23 build.gradle.kts
더보기

예시의 구문 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 { } 입니다.