在Gradle中,是否有更好的方法来获取环境变量?


151

在几个任务中,我引用主文件夹中的jar。

是否有比获取环境变量更好的方法

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属性。可能是辍学的……?
麦克啮齿动物

Answers:


243

好; 这同样适用:

home = "$System.env.HOME"

目前尚不清楚您的目标是什么。


17
或您的用法:放入“ $ {System.env.HOME} / something / plugins”中
JoeG 2013年

8
请注意,如果未将环境变量FOO定义为系统环境变量,则“ $ System.env.FOO”将返回值为“ null”的String。这可能会造成混淆,因为将值“ null”的字符串记录到控制台将输出与null变量相同的输出。
格克汗阿克尔巴里斯

4
或者只是home = 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"在不存在的情况下返回。
里卡多·弗雷塔斯

12

在Android Gradle 0.4.0中,您可以执行以下操作:

println System.env.HOME

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


11
thoredge说,您的答案要提前4年!
麦克啮齿动物
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.