Em Gradle, existe uma maneira melhor de obter variáveis ​​de ambiente?


151

Em várias tarefas, faço referência a jarros na minha pasta pessoal.

Existe uma maneira melhor de obter variáveis ​​de ambiente do que

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

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

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

Isso define $ HOME, mas eu esperava perder alguma mágica da documentação.


1
Esteja ciente de que antes que a variável de ambiente possa ser vista e usada pela Gradle, ela precisa ser exportada, ex. $ export FOO=bar.
Luka5z 31/05/19

Há algo que estou perdendo aqui ... Eu tenho que colocar def HOME: o Gradle 4.4.1 Projectnão tem uma HOMEpropriedade ou uma ENVpropriedade. Poderia ser algo que desistiu ...?
microfone roedor

Respostas:


243

Bem; isso funciona também:

home = "$System.env.HOME"

Não está claro o que você está buscando.


17
ou para seu uso: em "$ {System.env.HOME} / algo / plugins"
JoeG

8
Esteja ciente de que "$ System.env.FOO" retorna String com o valor "null", se a variável de ambiente FOO não estiver definida como uma variável de ambiente do sistema. Pode ser confuso, pois o registro de uma String com o valor "null" no console imprimirá a mesma saída que a variável nula.
Gökhan Barış Aker 12/04

4
ou apenas home = System.env.HOME?
Alice Purcell #

14
Se você está tentando obter uma variável de ambiente que pode não estar definida, seria melhor usar System.getenv('VAR')qual retorna nulo se não atribuído. Se você usar "$System.env.VAR", ele retornará a string "null".
ChrisH

Há algo que estou perdendo aqui ... Tenho que colocar def home: o Gradle 4.4.1 Projectnão tem uma homepropriedade. Poderia ser algo que desistiu ...?
microfone roedor

100

Não consegui que o formulário sugerido por @thoredge funcionasse no Gradle 1.11, mas isso funciona para mim:

home = System.getenv('HOME')

É bom lembrar que tudo que funciona em Java puro também funciona em Gradle.


Não sei por que, mas só consegui que a System.getenv('HOME')versão funcionasse para mim. A outra versão continuava retornandonull
Kip

1
Você usou aspas simples em vez de duplicar por engano, talvez?
Alice Purcell

7
isso é melhor que a resposta: stackoverflow.com/a/9856769/689223 , porque retorna em nullvez de "null"no caso de não existir.
Ricardo Freitas

12

No android gradle 0.4.0, você pode apenas fazer:

println System.env.HOME

classpath com.android.tools.build:gradle-experimentalditional.4.4


11
thoredge disse que 4 anos antes da sua resposta!
microfone roedor
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.