
以下のように指定したシステムプロパティは、Java アプリケーション側で受け取ることができない。
./gradlew run -Dapp.env=xxx -Dapp.prop=yyy
以下のように明示的に設定する必要がある。
アプリケーションプラグインの場合
plugins {
application
}
application {
mainClass.set("com.example.Main")
gradle.startParameter.systemPropertiesArgs.forEach { (k, v) ->
applicationDefaultJvmArgs = applicationDefaultJvmArgs + "-D$k=$v"
}
}
Exec タスクの場合
tasks.register<Exec>("run") { val args = mutableListOf( // ... ) gradle.startParameter.systemPropertiesArgs.forEach { (k, v) -> args.add("-D$k=$v") } commandLine(args) }
なお、systemPropertiesArgs には以下の値がシステムプロパティとして暗黙裡に設定されているため、必要に応じてフィルタリングすると良い。
user.variant= file.encoding=UTF-8 user.country=JP user.language=ja
System.getProperties() を使うこともできるが、この場合は Gradle が定義する大量のプロパティが含まれるため、明示的なフィルタリングが必要
System.getProperties().forEach { (k, v) ->
if (k.toString().startsWith("app.")) {
applicationDefaultJvmArgs = applicationDefaultJvmArgs + "-D$k=$v"
}
}