Gibt es in Gradle eine bessere Möglichkeit, Umgebungsvariablen abzurufen?

151

In mehreren Aufgaben verweise ich auf Gläser in meinem Home-Ordner.

Gibt es einen besseren Weg, um Umgebungsvariablen zu erhalten als

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

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

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

Dies setzt $ HOME, aber ich hatte gehofft, dass ich etwas Magie aus der Dokumentation verpasst habe.

Nicholas Marshall
quelle
1
Beachten Sie, dass Umgebungsvariablen, bevor sie von Gradle angezeigt und verwendet werden können, exportiert werden müssen, z. $ export FOO=bar.
Luka5z
Hier fehlt mir etwas ... Ich muss sagen def HOME: Gradle 4.4.1 Projecthat keine HOMEEigenschaft oder ENVEigenschaft. Könnte etwas sein, das herausgefallen ist ...?
Mike Nagetier

Antworten:

243

Gut; das funktioniert auch:

home = "$System.env.HOME"

Es ist nicht klar, was Sie anstreben.

thoredge
quelle
17
oder zu Ihrer Verwendung: in "$ {System.env.HOME} / Something / Plugins"
JoeG
8
Beachten Sie, dass "$ System.env.FOO" einen String mit dem Wert "null" zurückgibt, wenn die Umgebungsvariable FOO nicht als Systemumgebungsvariable definiert ist. Dies kann verwirrend sein, da beim Protokollieren eines Strings mit dem Wert "null" in der Konsole dieselbe Ausgabe wie bei der Variablen null ausgegeben wird.
Gökhan Barış Aker
4
oder einfach zu Hause = System.env.HOME?
Alice Purcell
14
Wenn Sie versuchen, eine Umgebungsvariable abzurufen, die möglicherweise nicht festgelegt ist, ist es besser, diese zu verwenden, System.getenv('VAR')die null zurückgibt, wenn sie nicht zugewiesen wird. Wenn Sie verwenden "$System.env.VAR", wird die Zeichenfolge zurückgegeben "null".
Chrish
Hier fehlt mir etwas ... Ich muss sagen def home: Gradle 4.4.1 Projecthat keine homeEigenschaft. Könnte etwas sein, das herausgefallen ist ...?
Mike Nagetier
100

Ich konnte das von @thoredge vorgeschlagene Formular nicht für Gradle 1.11 verwenden, aber das funktioniert für mich:

home = System.getenv('HOME')

Es ist zu beachten, dass alles, was in reinem Java funktioniert, auch in Gradle funktioniert.

Jarett Millard
quelle
Ich weiß nicht warum, aber ich konnte nur die System.getenv('HOME')Version für mich arbeiten lassen. Die andere Version kehrte immer wieder zurücknull
Kip
1
Haben Sie vielleicht versehentlich einfache Anführungszeichen anstelle von doppelten verwendet?
Alice Purcell
7
Dies ist besser als die Antwort: stackoverflow.com/a/9856769/689223 , da es zurückgegeben wird, nullanstatt für den "null"Fall, dass es nicht existiert.
Ricardo Freitas
12

In Android Gradle 0.4.0 können Sie einfach tun:

println System.env.HOME

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

Yochai Timmer
quelle
11
Thoredge sagte, dass 4 Jahre vor Ihrer Antwort!
Mike Nagetier