2016-03-31 136 views
16

我想从我的Gradle构建中设置一个环境变量。我在MacOS X(El Capitan)上。 该命令是“gradle测试”。从Gradle构建设置环境变量

我在我的build.gradle尝试这样的:

task setenv(type: Exec) { 
    commandLine "export", "SOME_TEST_VAR=aaa" 
} 
test.dependsOn setenv 

和构建失败:

执行失败的任务 ':myproject的:SETENV'。

的问题发生起动过程 '命令'出口'

我也试过这样:

test.doFirst { 
    ProcessBuilder pb1 = new ProcessBuilder("export SOME_TEST_VAR=some test value") 
    pb1.start(); 
} 

构建成功。但是,如果我在JUnit测试检查环境变量失败:

assertTrue(System.getenv().containsKey("SOME_TEST_VAR")); 

有没有办法从摇篮设置环境变量建立(在文件的build.gradle)?

更新:

我在隔离测试吧:值并获得通过,我的测试任务接收的一切,无论是systemProperty,环境变量或jvmArgs。

所以,Gradle本身在这里没什么问题。

当我在真实项目上尝试时出现问题。它使用Spring进行依赖注入。我可能是错的,但它看起来像Spring框架清除这些值的地方。

该子项目目前正在被冻结,我现在无法详细检查我的猜测。

+0

另一个失败实验: '测试{ systemProperty 'SOME_TEST_VAR', 'AAA' 环境 'SOME_TEST_VAR', 'AAA' }' 并在测试中: 'boolean good = System.getenv()。containsKey(“SOME_TEST_VAR”)|| System.getProperties()的containsKey( “SOME_TEST_VAR”); assertTrue(good);' – user3791111

+0

即使在阅读帮助后,我也无法在这里进行换行。对不起,只是假设我想让他们成为什么样的人。 – user3791111

+0

如果你有更多的信息需要提供,你应该编辑你的问题。 –

回答

15

对于测试任务,您可以使用environment property这样的:

test { 
    environment "VAR", "val" 
} 

,你也可以使用environment property在一个exec任务

task dropDatabase(type: Exec) { 
    environment "VAR", "val" 
    commandLine "doit" 
} 

请注意,这个方法的环境变量只在任务中设置。

+3

“环境”,“jvmArgs”和“systemProperties”等内容在“测试”任务中被忽略。我拼命试图理解为什么。我知道在单独的JVM中运行测试 - 至少“jvmArgs”应该可以工作,但不是。 – user3791111

+0

如果您只想分叉JVM,您还可以使用[JavaExec](https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/JavaExec.html)类。 – Stuporman

1

您还可以“在最前面的”使用“环境”命令的环境变量设置:

run.doFirst { environment 'SPARK_LOCAL_IP', 'localhost' } 
2

这一个是为我工作的设置环境变量的测试插件

test { 
    systemProperties = [ 
     'catalina.home': 'c:/test' 
    ] 
    println "Starting Tests" 
    beforeTest { descriptor -> 
     logger.lifecycle("Running test: " + descriptor)     
    }  
}