Czy w Gradle jest lepszy sposób na uzyskanie zmiennych środowiskowych?

151

W kilku zadaniach odwołuję się do słoików w moim folderze domowym.

Czy istnieje lepszy sposób na uzyskanie zmiennych środowiskowych niż

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

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

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

To ustawia $ HOME, ale miałem nadzieję, że przegapiłem trochę magii z dokumentacji.

Nicholas Marshall
źródło
1
Należy pamiętać, że zanim zmienna środowiskowa będzie widoczna i używana przez Gradle, musi zostać wyeksportowana, np. $ export FOO=bar.
luka5z
Jest coś, czego tu brakuje ... Muszę dodać def HOME: Gradle 4.4.1 Projectnie ma HOMEwłasności ani ENVwłaściwości. Może coś, co wypadło ...?
mike gryzoń

Odpowiedzi:

243

Dobrze; to również działa:

home = "$System.env.HOME"

Nie jest jasne, do czego dążysz.

thoredge
źródło
17
lub do użytku: do „$ {System.env.HOME} / something / plugins”
JoeG,
8
Należy pamiętać, że „$ System.env.FOO” zwraca ciąg o wartości „null”, jeśli zmienna środowiskowa FOO nie jest zdefiniowana jako zmienna środowiskowa systemu. Może to być mylące, ponieważ zarejestrowanie ciągu znaków o wartości „null” w konsoli spowoduje wyświetlenie tego samego wyniku co zmienna null.
Gökhan Barış Aker
4
lub po prostu home = System.env.HOME?
Alice Purcell
14
Jeśli próbujesz uzyskać zmienną środowiskową, która może nie być ustawiona, lepiej byłoby użyć, System.getenv('VAR')która zwraca wartość null, jeśli nie jest przypisana. Jeśli użyjesz "$System.env.VAR", zwróci ciąg "null".
chrish
Coś mi tu brakuje ... Muszę dodać def home: Gradle 4.4.1 Projectnie ma homewłaściwości. Może coś, co wypadło ...?
mike gryzoń
100

Nie mogłem uzyskać formularza sugerowanego przez @thoredge do pracy w Gradle 1.11, ale to działa dla mnie:

home = System.getenv('HOME')

Warto pamiętać, że wszystko, co działa w czystej Javie, będzie działać również w Gradle.

Jarett Millard
źródło
Nie wiem dlaczego, ale mogłem tylko sprawić, by System.getenv('HOME')wersja działała dla mnie. Druga wersja powracałanull
Kip
1
Czy przez pomyłkę użyłeś pojedynczych cudzysłowów zamiast podwójnych?
Alice Purcell
7
jest to lepsze niż odpowiedź: stackoverflow.com/a/9856769/689223 , ponieważ zwraca nullzamiast "null"w przypadku, gdy nie istnieje.
Ricardo Freitas
12

W Android Gradle 0.4.0 możesz po prostu zrobić:

println System.env.HOME

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

Yochai Timmer
źródło
11
thoredge powiedział, że 4 lata przed twoją odpowiedzią!
mike gryzoń