2012-01-09 157 views
8

我需要从Gradle执行依赖于环境变量的Ant脚本。 Ant为它使用<property environment="env"/>从Gradle设置环境变量

我试图在Gradle中做env.foo="bar",但它抛出了一个Groovy异常。

将环境变量从Gradle传递给Ant的正确方法是什么?

+0

你尝试通过使用Ant构建脚本'ant.importBuild'build.xml'? – 2012-01-10 00:46:18

+0

@Benjamin这就是我想要完成的。不幸的是,传统的Ant脚本依赖于几个环境变量。 – Sergey 2012-01-10 06:31:12

回答

4

这是不可能的设置从摇篮或JVM在一般的环境变量,但它有可能欺骗蚂蚁这样的:

ant.project.properties['env.foo'] = 'bar' 
+0

我收到一个错误:'找不到属性'' – 2016-07-25 19:44:24

9

gradle 2.0 docs,我看到这样的事情是可能的

test { 
    environment "LD_LIBRARY_PATH", "lib" 
} 

或在这种情况下,可以使用这个

systemProperty "java.library.path", "lib" 
+3

'我希望两年前有Gradle 2.0 :) – Sergey 2014-08-06 11:57:38

+1

我在我的build.gradle文件(用另一个变量名)试过这个。然后我在我的测试中检查系统变量,如下所示:'assertTrue(System.getenv()。containsKey(“SOME_TEST_VAR”));'这给出了断言错误。所以,它看起来像环境变量没有设置。 – user3791111 2016-03-31 03:11:01

+0

我收到一个错误'无法找到方法systemProperty()的参数 – 2016-07-25 19:43:39

1

Accep从@Sergey泰德的解决方案:

ant.project.properties['env.foo'] = 'bar' 

不为我上gradle 2.9和1.9.7 ant工作。 这没有引发任何错误,但什么都不做。事实上,如果你看一下代码它implemented as

public Hashtable<String, Object> getProperties() { 
    return PropertyHelper.getPropertyHelper(this).getProperties(); 
} 

其中org.apache.tools.ant.PropertyHelper#getProperties is

public Hashtable<String, Object> getProperties() { 
    //avoid concurrent modification: 
    synchronized (properties) { 
     return new Hashtable<String, Object>(properties); 
    } 
} 

所以作出明确的副本,它不能正常工作。

的方式正确做在gradle文件:

ant.project.setProperty('env.foo', 'bar') 

Documentation提及一些其他方法(注意,无项目):

ant.buildDir = buildDir 
ant.properties.buildDir = buildDir 
ant.properties['buildDir'] = buildDir 
ant.property(name: 'buildDir', location: buildDir)