Чи є кращий спосіб отримати змінні середовища?


151

У кількох завданнях я посилаю банки в домашній папці.

Чи є кращий спосіб отримати змінні середовища, ніж такий

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 не визначена як змінна системного середовища. Це може бути заплутано, оскільки при вході в консоль String зі значенням "null" буде надруковано такий же вихід, як і null змінна.
Gökhan Barış Aker

4
чи просто додому = System.env.HOME?
Аліса Перселл

14
Якщо ви намагаєтеся отримати змінну середовища, яка може бути не встановлена, було б краще скористатися, System.getenv('VAR')яка повертає null, якщо її не призначити. Якщо ви використовуєте, "$System.env.VAR"то він поверне рядок "null".
Кріш

Щось тут мені не вистачає ... Я мушу сказати 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"якщо його не існує.
Рікардо Фрейтас

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.