在Gradle中,有更好的方法来获取环境变量吗?

Nic*_*all 139 gradle

在几个任务中,我引用了我的主文件夹中的jar.

是否有更好的方法来获取环境变量

ENV = System.getenv()
HOME = ENV['HOME']

task copyToServer(dependsOn: 'jar', type: Copy) {

 from 'build/libs/'
 into HOME + "/something/plugins/"
}
Run Code Online (Sandbox Code Playgroud)

这设置了$ HOME,但我希望我从文档中错过了一些魔法.

tho*_*dge 224

好; 这也有效:

home = "$System.env.HOME"
Run Code Online (Sandbox Code Playgroud)

目前尚不清楚你的目标是什么.

  • 或者你的用法:进入"$ {System.env.HOME}/something/plugins" (16认同)
  • 如果您尝试获取可能未设置的环境变量,最好使用`System.getenv('VAR')`如果未分配则返回null.如果你使用``$ System.env.VAR``那么它将返回字符串`"null"`. (13认同)
  • 请注意,如果环境变量FOO未定义为系统环境变量,则"$ System.env.FOO"将返回值为"null"的String.它可能会令人困惑,因为将值为"null"的String记录到控制台将打印与null变量相同的输出. (8认同)
  • 或者只是home = System.env.HOME? (4认同)
  • @chrish 你也可以使用`System.env.VAR`。`"$System.env.VAR"` 返回(字符串)`"null"` 而不是 `null` 的原因是因为字符串插值,而不是因为使用 `System.env` 代替 `System.getenv` . 使用 `"${System.getenv('VAR')}"` 有完全相同的问题。 (2认同)

Jar*_*ard 92

我无法得到@thoredge建议的格式在Gradle 1.11中工作,但这对我有用:

home = System.getenv('HOME')
Run Code Online (Sandbox Code Playgroud)

它有助于记住,任何在纯Java中工作的东西也可以在Gradle中工作.

  • 这比答案更好:http://stackoverflow.com/a/9856769/689223,因为它返回`null`而不是``null"`以防它不存在. (7认同)
  • 也许您错误地使用了单引号而不是双引号? (2认同)

Mah*_*zad 21

这是针对Kotlin DSL (build.gradle.kts )的:

val myVariable = System.getenv("MY_VARIABLE_NAME") ?: "my default value"
Run Code Online (Sandbox Code Playgroud)

或者

val myVariable = System.getenv("MY_VARIABLE_NAME") ?: error("Env variable not found")
Run Code Online (Sandbox Code Playgroud)

或者

val environment = System.getenv()
val myVariable = environment["MY_VARIABLE_NAME"] ?: "my default value"
// OR val myVariable = environment["MY_VARIABLE_NAME"] ?: error("Env variable not found")
Run Code Online (Sandbox Code Playgroud)


Yoc*_*mer 11

在android gradle 0.4.0中你可以这样做:

println System.env.HOME
Run Code Online (Sandbox Code Playgroud)

classpath com.android.tools.build:gradle-experimental:0.4.0

  • thoredge说你答案前4年! (9认同)