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.


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.


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.


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


11
thoredge a dit que 4 ans avant ta réponse!
mike rodent
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.