In Gradle, c'è un modo migliore per ottenere variabili d'ambiente?


151

In diverse attività, faccio riferimento a vasetti nella mia cartella home.

Esiste un modo migliore per ottenere variabili d'ambiente rispetto a

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

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

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

Questo imposta $ HOME ma speravo che mi mancasse un po 'di magia dalla documentazione.


1
Ricorda che prima che la variabile di ambiente possa essere vista e utilizzata da Gradle, deve essere esportata, ad es. $ export FOO=bar.
luka5z,

C'è qualcosa che mi manca qui ... Devo mettere def HOME: Gradle 4.4.1 Projectnon ha una HOMEproprietà o una ENVproprietà. Potrebbe essere qualcosa che ha abbandonato ...?
mike rodent,

Risposte:


243

Bene; funziona anche questo:

home = "$System.env.HOME"

Non è chiaro a cosa stai mirando.


17
o al tuo utilizzo: in "$ {System.env.HOME} / qualcosa / plugin"
JoeG

8
Tenere presente che "$ System.env.FOO" restituisce String con valore "null", se la variabile di ambiente FOO non è definita come variabile di ambiente di sistema. Potrebbe essere fonte di confusione poiché la registrazione di una stringa con valore "null" sulla console stamperà lo stesso output della variabile null.
Gökhan Barış Aker,

4
o semplicemente home = System.env.HOME?
Alice Purcell,

14
Se si sta tentando di ottenere una variabile di ambiente che potrebbe non essere impostata, sarebbe meglio utilizzare System.getenv('VAR')quale restituisce null se non assegnato. Se lo usi "$System.env.VAR", restituirà la stringa "null".
chrish,

C'è qualcosa che mi manca qui ... Devo mettere def home: Gradle 4.4.1 Projectnon ha una homeproprietà. Potrebbe essere qualcosa che ha abbandonato ...?
mike rodent,

100

Non sono riuscito a far funzionare il modulo suggerito da @thoredge nel Gradle 1.11, ma questo funziona per me:

home = System.getenv('HOME')

Aiuta a tenere presente che tutto ciò che funziona in Java puro funzionerà anche in Gradle.


Non sono sicuro del perché, ma sono riuscito a far funzionare solo la System.getenv('HOME')versione per me. L'altra versione continuava a tornarenull
Kip

1
Hai usato virgolette singole anziché doppie per errore, forse?
Alice Purcell,

7
questo è meglio della risposta: stackoverflow.com/a/9856769/689223 , perché restituisce nullinvece che "null"nel caso non esistesse.
Ricardo Freitas,

12

In Android Gradle 0.4.0 puoi semplicemente fare:

println System.env.HOME

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


11
thoredge ha detto che 4 anni prima della tua risposta!
mike rodent,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.