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.

Nicholas Marshall
fonte
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.

thoredge
fonte
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.

Jarett Millard
fonte
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

Yochai Timmer
fonte
11
thoredge disse que 4 anos antes da sua resposta!
microfone roedor