ใน Gradle มีวิธีที่ดีกว่าในการรับตัวแปรสภาวะแวดล้อมหรือไม่?


151

ในหลายงานฉันอ้างอิงไหในโฟลเดอร์บ้านของฉัน

มีวิธีที่ดีกว่าที่จะได้รับตัวแปรสภาพแวดล้อมกว่า

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

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

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

ชุดนี้เป็นบ้าน $ แต่ฉันหวังว่าฉันพลาดเวทมนตร์จากเอกสาร


1
โปรดทราบว่าก่อนที่ตัวแปรสภาพแวดล้อมจะสามารถเห็นและใช้งานโดย Gradle จะต้องมีการส่งออกเช่น $ export FOO=bar.
luka5z

มีบางอย่างที่ฉันขาดหายไปที่นี่ ... ฉันต้องใส่def HOME: Gradle 4.4.1 Projectไม่มีHOMEคุณสมบัติหรือENVคุณสมบัติ อาจเป็นสิ่งที่หลุดออกไป ...
ไมค์หนู

คำตอบ:


243

ดี; งานนี้เช่นกัน:

home = "$System.env.HOME"

ยังไม่ชัดเจนว่าคุณตั้งเป้าหมายอะไร


17
หรือเพื่อการใช้งานของคุณ: เข้าสู่ "$ {System.env.HOME} /
some

8
โปรดทราบว่า "$ System.env.FOO" จะส่งคืนสตริงที่มีค่า "null" หากตัวแปรสภาพแวดล้อม FOO ไม่ได้ถูกกำหนดไว้เป็นตัวแปรสภาพแวดล้อมของระบบ มันอาจจะสับสนตั้งแต่เข้าสู่ระบบสตริงที่มีค่า "null" เพื่อคอนโซลจะพิมพ์ผลลัพธ์เช่นเดียวกับตัวแปร null
GökhanBarış Aker

4
หรือแค่บ้าน = System.env.HOME
อลิซเพอร์เซลล์

14
หากคุณพยายามรับตัวแปรสภาพแวดล้อมที่อาจไม่ได้รับการตั้งค่าจะเป็นการดีกว่าถ้าใช้การSystem.getenv('VAR')คืนค่า null หากไม่ได้รับมอบหมาย ถ้าคุณใช้แล้วมันจะกลับสตริง"$System.env.VAR" "null"
chrish

มีบางอย่างที่ฉันขาดหายไปที่นี่ ... ฉันต้องใส่def home: Gradle 4.4.1 Projectไม่มีhomeคุณสมบัติ อาจเป็นสิ่งที่หลุดออกไป ...
ไมค์หนู

100

ฉันไม่สามารถรับแบบฟอร์มที่แนะนำโดย @thoredge ให้ทำงานใน Gradle 1.11 ได้ แต่สิ่งนี้ใช้ได้สำหรับฉัน:

home = System.getenv('HOME')

ช่วยจำไว้ว่าสิ่งใดก็ตามที่ทำงานในจาวาบริสุทธิ์จะทำงานใน Gradle ด้วย


ไม่แน่ใจว่าทำไม แต่ฉันได้รับSystem.getenv('HOME')รุ่นที่จะทำงานให้ฉันเท่านั้น รุ่นอื่น ๆ ยังคงกลับมาnull
Kip

1
คุณใช้คำพูดเดี่ยวแทนที่จะเป็นสองเท่าโดยไม่ตั้งใจหรือไม่?
Alice Purcell

7
นี้ดีกว่าคำตอบ: stackoverflow.com/a/9856769/689223เพราะมันกลับมาnullแทน"null"ในกรณีที่มันไม่มีอยู่
Ricardo Freitas

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.