В Gradle есть ли лучший способ получить переменные среды?


151

В нескольких заданиях я ссылаюсь на файлы jar в своей домашней папке.

Есть ли лучший способ получить переменные среды, чем

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

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

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

Это устанавливает $ HOME, но я надеялся, что пропустил какое-то волшебство из документации.


1
Помните, что перед тем, как переменная окружения будет видна и использована Gradle, ее необходимо экспортировать, например. $ export FOO=bar,
luka5z

Здесь есть кое-что, чего мне не хватает ... Я должен def HOMEуказать: Gradle 4.4.1 Projectне имеет HOMEсвойства или ENVсвойства. Может быть что-то выпало ...?
Майк Грызун

Ответы:


243

Хорошо; это работает также:

home = "$System.env.HOME"

Непонятно, к чему вы стремитесь.


17
или для вашего использования: в "$ {System.env.HOME} / что-то / плагины"
JoeG

8
Помните, что «$ System.env.FOO» возвращает строку со значением «null», если переменная среды FOO не определена как системная переменная среды. Это может привести к путанице, поскольку запись строки со значением «null» в консоль будет выводить тот же вывод, что и переменная null.
Гекхан Барыш Акер

4
или просто home = System.env.HOME?
Алиса Перселл,

14
Если вы пытаетесь получить переменную окружения, которая может быть не установлена, было бы лучше использовать, System.getenv('VAR')которая возвращает ноль, если не назначена. Если вы используете, "$System.env.VAR"то он вернет строку "null".
chrish

Здесь что-то мне не хватает ... Я должен поставить def home: Gradle 4.4.1 Projectне имеет homeсвойства. Может быть что-то выпало ...?
Майк Грызун

100

Я не смог заставить форму, предложенную @thoredge, работать в Gradle 1.11, но это работает для меня:

home = System.getenv('HOME')

Помните, что все, что работает на чистой Java, будет работать и в Gradle.


Не уверен, почему, но я мог только заставить System.getenv('HOME')версию работать на меня. Другая версия продолжала возвращатьсяnull
Кип

1
Возможно, вы использовали одинарные кавычки вместо двойных по ошибке?
Алиса Перселл

7
это лучше, чем ответ: stackoverflow.com/a/9856769/689223 , потому что он возвращается, nullа не "null"в случае, если он не существует.
Рикардо Фрейтас

12

В Android Gradle 0.4.0 вы можете просто сделать:

println System.env.HOME

путь к классу com.android.tools.build:gradle-experimental:0.4.0


11
Thoredge сказал, что за 4 года до вашего ответа!
Майк Грызун
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.