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.


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.


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.


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


11
thoredge powiedział, że 4 lata przed twoją odpowiedzią!
mike gryzoń
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.