Dans Gradle, existe-t-il un meilleur moyen d'obtenir des variables d'environnement?

151

Dans plusieurs tâches, je référence les fichiers jar dans mon dossier personnel.

Existe-t-il un meilleur moyen d'obtenir les variables d'environnement que

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

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

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

Cela définit $ HOME mais j'espérais avoir manqué un peu de magie dans la documentation.

Nicolas Marshall
la source
1
Sachez qu'avant que la variable d'environnement puisse être vue et utilisée par Gradle, elle doit être exportée, ex. $ export FOO=bar.
luka5z
Il me manque quelque chose ici ... Je dois mettre def HOME: Gradle 4.4.1 Projectn'a pas de HOMEpropriété ou de ENVpropriété. Peut-être quelque chose qui a abandonné ...?
mike rodent

Réponses:

243

Bien; cela fonctionne aussi bien:

home = "$System.env.HOME"

Ce que vous visez n'est pas clair.

thoredge
la source
17
ou à votre utilisation: dans "$ {System.env.HOME} / something / plugins"
JoeG
8
Sachez que "$ System.env.FOO" renvoie String avec la valeur "null", si la variable d'environnement FOO n'est pas définie comme variable d'environnement système. Cela peut être déroutant car la journalisation d'une chaîne avec la valeur "null" dans la console affichera la même sortie que la variable null.
Gökhan Barış Aker
4
ou simplement home = System.env.HOME?
Alice Purcell
14
Si vous essayez d'obtenir une variable d'environnement qui n'est peut-être pas définie, il serait préférable d'utiliser System.getenv('VAR')qui renvoie null si elle n'est pas affectée. Si vous utilisez, "$System.env.VAR"il renverra la chaîne "null".
chrish
Il me manque quelque chose ici ... Je dois mettre def home: Gradle 4.4.1 Projectn'a pas de homepropriété. Peut-être quelque chose qui a abandonné ...?
mike rodent
100

Je n'ai pas pu faire fonctionner le formulaire suggéré par @thoredge dans Gradle 1.11, mais cela fonctionne pour moi:

home = System.getenv('HOME')

Il est utile de garder à l'esprit que tout ce qui fonctionne en Java pur fonctionnera également dans Gradle.

Jarett Millard
la source
Je ne sais pas pourquoi mais je n'ai pu faire fonctionner la System.getenv('HOME')version que pour moi. L'autre version revenait sans cessenull
Kip
1
Avez-vous utilisé des guillemets simples au lieu de doubles par erreur, peut-être?
Alice Purcell
7
c'est mieux que la réponse: stackoverflow.com/a/9856769/689223 , car il retourne nullau "null"cas où il n'existe pas.
Ricardo Freitas
12

Dans Android Gradle 0.4.0, vous pouvez simplement faire:

println System.env.HOME

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

Yochai Timmer
la source
11
thoredge a dit que 4 ans avant ta réponse!
mike rodent