Trong Gradle, có cách nào tốt hơn để có được Biến môi trường không?


151

Trong một số Nhiệm vụ, tôi tham chiếu các lọ trong thư mục nhà của tôi.

Có cách nào tốt hơn để có được Biến môi trường hơn

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

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

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

Điều này đặt $ HOME nhưng tôi đã hy vọng rằng tôi đã bỏ lỡ một số phép thuật từ tài liệu này.


1
Xin lưu ý rằng trước khi biến môi trường có thể được xem và sử dụng bởi Gradle, nó cần phải được xuất, ví dụ. $ export FOO=bar.
luka5z

Có một cái gì đó tôi đang thiếu ở đây ... Tôi phải đặt def HOME: Lớp 4.4.1 Projectkhông có HOMEtài sản hoặc ENVtài sản. Có thể là một cái gì đó bỏ ra ...?
mike gặm nhấm

Câu trả lời:


243

Tốt; điều này cũng hoạt động:

home = "$System.env.HOME"

Không rõ bạn đang nhắm đến cái gì.


17
hoặc theo cách sử dụng của bạn: vào "$ {System.env.HOME} /
Something

8
Xin lưu ý rằng "$ System.env.FOO" trả về Chuỗi có giá trị "null", nếu biến môi trường FOO không được định nghĩa là biến môi trường hệ thống. Có thể gây nhầm lẫn vì việc đăng nhập Chuỗi có giá trị "null" vào bàn điều khiển sẽ in cùng một đầu ra dưới dạng biến null.
Gökhan Barış Aker

4
hoặc chỉ về nhà = System.env.HOME?
Alice Purcell

14
Nếu bạn đang cố gắng để có được một biến môi trường có thể không được đặt, tốt hơn là sử dụng System.getenv('VAR')biến trả về null nếu không được chỉ định. Nếu bạn sử dụng "$System.env.VAR"thì nó sẽ trả về chuỗi "null".
chúc mừng

Có một cái gì đó tôi đang thiếu ở đây ... Tôi phải đặt def home: Lớp 4.4.1 Projectkhông có hometài sản. Có thể là một cái gì đó bỏ ra ...?
mike gặm nhấm

100

Tôi không thể nhận được biểu mẫu được đề xuất bởi @thoredge để làm việc trong Lớp 1.11, nhưng điều này hiệu quả với tôi:

home = System.getenv('HOME')

Nó giúp ghi nhớ rằng bất kỳ thứ gì hoạt động trong Java thuần cũng sẽ hoạt động trong Gradle.


Không chắc chắn tại sao nhưng tôi chỉ có thể làm cho System.getenv('HOME')phiên bản hoạt động cho tôi. Phiên bản khác tiếp tục quay trở lạinull
Kip

1
Bạn đã sử dụng dấu ngoặc đơn thay vì gấp đôi do nhầm lẫn, có lẽ?
Alice Purcell

7
Điều này tốt hơn câu trả lời: stackoverflow.com/a/9856769/689223 , vì nó trả về nullthay vì "null"trong trường hợp nó không tồn tại.
Ricardo Freitas

12

Trong Android gradle 0.4.0, bạn chỉ có thể làm:

println System.env.HOME

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


11
thoredge nói rằng 4 năm trước câu trả lời của bạn!
mike gặm nhấm
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.