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.


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.


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.


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


11
Thoredge sagte, dass 4 Jahre vor Ihrer Antwort!
Mike Nagetier
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.