我正在尝试从我的 Gradle 构建中设置一个环境变量。我使用的是 MacOS X (El Capitan)。 命令是“gradle test”。
我正在我的 build.gradle 中尝试这个:
task setenv(type: Exec) {
commandLine "export", "SOME_TEST_VAR=aaa"
}
test.dependsOn setenv
构建失败:
Execution failed for task ':myproject:setenv'.
block 引用>A problem occurred starting process 'command 'export''
我也尝试过这个:
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 进行依赖注入(inject)。我可能是错的,但看起来 Spring 框架在某处清除了这些值。
该子项目目前正在卡住,我现在无法详细检查我的猜测。
最佳答案
对于测试任务,您可以使用 environment property像这样:
test {
environment "VAR", "val"
}
您还可以使用environment property在执行任务中
task dropDatabase(type: Exec) {
environment "VAR", "val"
commandLine "doit"
}
请注意,使用此方法时,环境变量仅在任务期间设置。
关于gradle - 如何从 Gradle 构建中设置环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36322536/