Di Gradle, apakah ada cara yang lebih baik untuk mendapatkan Variabel Lingkungan?


151

Dalam beberapa Tugas, saya mereferensikan guci di folder rumah saya.

Apakah ada cara yang lebih baik untuk mendapatkan Variabel Lingkungan daripada

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

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

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

Ini menetapkan $ HOME tetapi saya berharap bahwa saya melewatkan beberapa keajaiban dari dokumentasi.


1
Ketahuilah bahwa sebelum variabel lingkungan dapat dilihat dan digunakan oleh Gradle, itu perlu diekspor, mis. $ export FOO=bar.
luka5z

Ada sesuatu yang saya lewatkan di sini ... Saya harus meletakkan def HOME: Gradle 4.4.1 Projecttidak memiliki HOMEproperti atau ENVproperti. Bisa jadi sesuatu yang keluar ...?
mike rodent

Jawaban:


243

Baik; ini juga berfungsi:

home = "$System.env.HOME"

Tidak jelas tujuan Anda.


17
atau untuk penggunaan Anda: ke "$ {System.env.HOME} / something / plugins"
JoeG

8
Ketahuilah bahwa "$ System.env.FOO" mengembalikan String dengan nilai "null", jika variabel lingkungan FOO tidak didefinisikan sebagai variabel lingkungan sistem. Mungkin membingungkan karena mencatat String dengan nilai "null" ke konsol akan mencetak hasil yang sama dengan variabel nol.
Gökhan Barış Aker

4
atau hanya home = System.env.HOME?
Alice Purcell

14
Jika Anda mencoba untuk mendapatkan variabel lingkungan yang mungkin tidak disetel, akan lebih baik untuk menggunakan System.getenv('VAR')yang mengembalikan nol jika tidak ditugaskan. Jika Anda gunakan "$System.env.VAR"maka itu akan mengembalikan string "null".
chrish

Ada sesuatu yang saya lewatkan di sini ... Saya harus meletakkan def home: Gradle 4.4.1 Projecttidak memiliki homeproperti. Bisa jadi sesuatu yang keluar ...?
mike rodent

100

Saya tidak bisa mendapatkan formulir yang disarankan oleh @thoredge untuk bekerja di Gradle 1.11, tetapi ini berfungsi untuk saya:

home = System.getenv('HOME')

Perlu diingat bahwa apa pun yang berfungsi di Java murni akan berfungsi di Gradle juga.


Tidak yakin mengapa, tetapi saya hanya bisa membuat System.getenv('HOME')versi berfungsi untuk saya. Versi lain terus kembalinull
Kip

1
Apakah Anda menggunakan tanda kutip tunggal dan bukannya ganda karena kesalahan, mungkin?
Alice Purcell

7
ini lebih baik daripada jawaban: stackoverflow.com/a/9856769/689223 , karena ia mengembalikan nullbukannya "null"dalam kasus itu tidak ada.
Ricardo Freitas

12

Di android gradle 0.4.0 Anda bisa melakukan:

println System.env.HOME

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


11
thoredge mengatakan bahwa 4 tahun sebelum jawaban Anda!
mike rodent
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.