我正在尝试从Gradle构建中设置环境变量。我在MacOS X(El Capitan)上。该命令是“gradle test”。
我在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"));
有没有办法从Gradle构建(在build.gradle文件中)设置环境变量?
更新:
我已经单独测试了它:值传递了,我的测试任务收到了所有东西,无论是systemProperty,环境变量还是jvmArgs。
所以,Gradle本身并没有错。
当我在真实项目上尝试它时,问题就出现了。它使用Spring进行依赖注入。我可能错了,但看起来Spring框架在某处清除了这些值。
该子项目目前正在冻结,我现在无法详细检查我的猜测。
对于测试任务,您可以像这样使用environment property:
test {
environment "VAR", "val"
}
你也可以在exec任务中使用environment property
task dropDatabase(type: Exec) {
environment "VAR", "val"
commandLine "doit"
}
请注意,使用此方法时,仅在任务期间设置环境变量。
您还可以使用'environment'命令“预置”环境变量设置:
run.doFirst { environment 'SPARK_LOCAL_IP', 'localhost' }
这个适用于我的测试插件的设置环境变量
test {
systemProperties = [
'catalina.home': 'c:/test'
]
println "Starting Tests"
beforeTest { descriptor ->
logger.lifecycle("Running test: " + descriptor)
}
}
在我的项目中,我在子模块中进行了集成测试的Gradle任务:
task intTest(type: Test) {
...
system.properties System.properties
...
这是将所有系统参数注入测试环境的要点。所以,现在你可以像这样运行gradle来传递具有ABC值的param并在你的代码中使用$ {param}的值
gradle :some-service:intTest -Dparam=ABC