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.


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.


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.


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


11
Thoredge dijo que 4 años antes de su respuesta!
Mike roedor
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.