본문 바로가기

Build/Gradle

Gradle 도큐먼트: 시스템 프로퍼티(System 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.properties 파일에서도 시스템 프로퍼티를 설정 할 수 있습니다. 시스템 프로퍼티는 systemProp 접두사로 시작합니다.

systemProp.gradle.wrapperUser=myuser
systemProp.gradle.wrapperPassword=mypassword
더보기

다중 프로젝트 빌드(Multi Project build)에서 루트 프로젝트를 제외한 모든 프로젝트의 systemProp 프로퍼티는 무시됩니다.

루트 프로젝트의 gradle.properties 파일만 systemProp 프로퍼티가 적용되므로 주의합니다.

gradle.properties 파일에 systemProp.system 프로퍼티를 추가합니다.

systemProp.system=gradlePropertiesValue

settings.gradle.kts 파일에 다음 코드를 추가하면 Configuration time에 시스템 프로퍼티를 읽을 수 있습니다.

// Using the Java API
println("Configuration time: " + System.getProperty("system"))

// Using the Gradle API, provides a lazy Provider<String>
println("Configuration time: " + providers.systemProperty("system").get())
더보기

Gradle 프로젝트 루트 디렉토리에서 ./gradlew build를 수행합니다.

$ ./gradlew build

Configuration time: gradlePropertiesValue
Configuration time: gradlePropertiesValue

...

BUILD SUCCESSFUL in 1s
7 actionable tasks: 4 executed, 3 up-to-date

 

Runtime에서 시스템 프로퍼티에 엑세스 할 수 있습니다. build.gradle.kts 파일을 다음과 같이 변경합니다.

tasks.named<Test>("test") {
    // Use JUnit Platform for unit tests.
    useJUnitPlatform()
    println("Runtime: " + providers.systemProperty("system").get())
}
더보기

Gradle 프로젝트 루트 디렉토리에서 ./gradlew test를 수행합니다.

./gradlew test

Configuration time: gradlePropertiesValue
Configuration time: gradlePropertiesValue
Runtime: gradlePropertiesValue

...

BUILD SUCCESSFUL in 712ms
3 actionable tasks: 3 up-to-date

명령줄(Command-Line)을 사용한 시스템 프로퍼티 적용

명렬줄 옵션 -D는 Gradle을 실행하는 JVM에 시스템 프로퍼티를 전달합니다. Gradle의 -D 옵션은 자바 명령문의 -D 옵션과 동일합니다.

$ ./gradlew test -Dsystem=commandLineValue

Configuration time: commandLineValue
Configuration time: commandLineValue
Runtime: commandLineValue

...

BUILD SUCCESSFUL in 906ms
3 actionable tasks: 3 up-to-date
더보기

gradle.properties에서 시스템 프로퍼티를 적용한 상태였다면 명령줄의 -D 옵션이 우선 적용되는 것을 알 수 있습니다.

정리 및 복습

  • 시스템 프로퍼티(System properties)프로퍼티 파일 또는 명령줄을 사용해서 입력 할 수 있습니다.
  • 프로퍼티 파일에 입력하려면 gradle.properties 파일을 수정합니다.
  • 프로퍼티 파일에서 지정하는 시스템 프로퍼티는 systemProp 접두사로 시작합니다.
systemProp.system=gradlePropertiesValue
  • 명령줄을 사용해 입력하려면 -D 옵션을 사용합니다.
$ ./gradlew test -Dsystem=commandLineValue