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.