En Gradle, ¿hay una mejor manera de obtener variables de entorno?

151

En varias tareas, hago referencia a los frascos en mi carpeta de inicio.

¿Hay una mejor manera de obtener variables de entorno que

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

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

 from 'build/libs/'
 into HOME + "/something/plugins/"
}

Esto establece $ HOME, pero esperaba perder algo de magia de la documentación.

Nicholas Marshall
fuente
1
Tenga en cuenta que antes de que Gradle pueda ver y utilizar la variable de entorno, debe exportarse, por ej. $ export FOO=bar.
luka5z
Hay algo que me falta aquí ... Tengo que poner def HOME: Gradle 4.4.1 Projectno tiene una HOMEpropiedad o una ENVpropiedad. ¿Podría ser algo que se retiró ...?
Mike roedor

Respuestas:

243

Bien; esto también funciona:

home = "$System.env.HOME"

No está claro a qué apunta.

Thoredge
fuente
17
o para su uso: en "$ {System.env.HOME} / something / plugins"
JoeG
8
Tenga en cuenta que "$ System.env.FOO" devuelve String con el valor "nulo", si la variable de entorno FOO no está definida como una variable de entorno del sistema. Puede ser confuso ya que registrar una Cadena con valor "nulo" en la consola imprimirá el mismo resultado que la variable nula.
Gökhan Barış Aker
44
o solo home = System.env.HOME?
Alice Purcell
14
Si está tratando de obtener una variable de entorno que podría no establecerse, sería mejor usar System.getenv('VAR')que devuelve nulo si no está asignado. Si lo usa "$System.env.VAR", devolverá la cadena "null".
cristiano el
Hay algo que me falta aquí ... Tengo que poner def home: Gradle 4.4.1 Projectno tiene una homepropiedad. ¿Podría ser algo que se retiró ...?
Mike roedor
100

No pude obtener el formulario sugerido por @thoredge para trabajar en Gradle 1.11, pero esto funciona para mí:

home = System.getenv('HOME')

Es útil tener en cuenta que cualquier cosa que funcione en Java puro también funcionará en Gradle.

Jarett Millard
fuente
No estoy seguro de por qué, pero solo pude hacer que la System.getenv('HOME')versión funcione para mí. La otra versión seguía regresandonull
Kip
1
¿Usó comillas simples en lugar de dobles por error, tal vez?
Alice Purcell
77
esto es mejor que la respuesta: stackoverflow.com/a/9856769/689223 , porque regresa en nulllugar de "null"en caso de que no exista.
Ricardo Freitas
12

En Android Gradle 0.4.0 puedes hacer:

println System.env.HOME

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

Yochai Timmer
fuente
11
Thoredge dijo que 4 años antes de su respuesta!
Mike roedor