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.

Nicholas Marshall
sumber
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.

thoredge
sumber
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.

Jarett Millard
sumber
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

Yochai Timmer
sumber
11
thoredge mengatakan bahwa 4 tahun sebelum jawaban Anda!
mike rodent