В 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"

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

thoredge
источник
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 года до вашего ответа!
Майк Грызун