Gradle からシステム環境変数をアプリケーションに渡す

blog1.mammb.com


Gradle では -D オプションでシステム環境変数を設定できる。

./gradlew run -Denv=dev

しかしこのように設定した環境変数は、Gradle には渡るが、そこから起動するアプリケーション側には渡らない。

ビルドスクリプト内で systemProperty に明示的に設定する必要がある。

tasks.run.configure {  
    systemProperty("env", System.getProperty("env"))  
}

systemProperty に設定することでアプリケーション側で、システム環境変数として取得できる。

var env = System.getProperty("env", "undef");

全ての環境変数をアプリケーション側に渡す場合は以下のようにすることができる。

tasks.run.configure {  
  systemProperties(System.getProperties().toMap() as Map<String,Object>)
}


Gradle では -P オプションのプロジェクト環境変数を使うことも多い。

./gradlew run -Penv=dev

プロジェクト環境変数をアプリケーション側のシステム環境変数に渡す場合は以下のようになる。

tasks.run.configure {  
  systemProperty("env", project.properties["env"])
}

なお、-Dorg.gradle.project を付けることで、-D オプションでプロジェクト環境変数を渡すこともできる。

./gradlew run -Dorg.gradle.project.env=stg


コマンドラインからではなく、gradle.properties に定義することもできる。

# システム環境変数
systemProp.pts.enabled=true
systemProp.file.encoding = UTF-8

# プロジェクト環境変数
kotlin.code.style=official
spring-boot.version = 2.2.1.RELEASE