如何从Gradle构建中设置环境变量?
我正在尝试从Gradle构建中设置一个环境变量。我在MacOS X(El Capitan)上。 命令是“梯度测试” 我试着在我的身体里这样做。格雷德尔:如何从Gradle构建中设置环境变量?,gradle,environment-variables,build.gradle,Gradle,Environment Variables,Build.gradle,我正在尝试从Gradle构建中设置一个环境变量。我在MacOS X(El Capitan)上。 命令是“梯度测试” 我试着在我的身体里这样做。格雷德尔: task setenv(type: Exec) { commandLine "export", "SOME_TEST_VAR=aaa" } test.dependsOn setenv 而构建失败: 任务“:myproject:setenv”的执行失败 启动进程“命令”导出“”时出现问题 我也试过: test.doFirst {
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、环境变量还是JVMARG
所以Gradle本身在这里没什么问题
当我在实际项目中尝试时,问题就出现了。它使用Spring进行依赖注入。我可能错了,但Spring框架似乎在某处清除了这些值
该子项目目前正在冻结中,我现在无法详细检查我的猜测。对于测试任务,您可以使用如下方法:
test {
environment "VAR", "val"
}
也可以在exec任务中使用
task dropDatabase(type: Exec) {
environment "VAR", "val"
commandLine "doit"
}
请注意,使用此方法,环境变量仅在任务期间设置。您也可以使用“环境”命令“预先设置”环境变量设置:
run.doFirst { environment 'SPARK_LOCAL_IP', 'localhost' }
这是一个为我工作的设置环境变量的测试插件
test {
systemProperties = [
'catalina.home': 'c:/test'
]
println "Starting Tests"
beforeTest { descriptor ->
logger.lifecycle("Running test: " + descriptor)
}
}
在我的项目中,我有子模块集成测试的梯度任务:
task intTest(type: Test) {
...
system.properties System.properties
...
这是将所有系统参数注入测试环境的要点。
所以,现在您可以像这样运行gradle,用ABC值传递param,并在代码中通过${param}使用它的值
gradle :some-service:intTest -Dparam=ABC
如果在Gradle外部定义了全局环境变量
test {
environment "ENV_VAR", System.getenv('ENV_VAR')
useJUnitPlatform()
}
请尝试这一选项:
task RunTest(type: Test) {
systemProperty "spring.profiles.active", System.getProperty("DEV")
include 'com/db/project/Test1.class'
}
这看起来像是一个旧线程,但是我们可以在Gradle任务中设置环境变量
task runSomeRandomTask(type: NpmTask, dependsOn: [npmInstall]) {
environment = [ 'NODE_ENV': 'development', BASE_URL: '3000' ]
args = ['run']
}
上述Gradle任务集成了Gradle和npm任务
这样我们可以传递多个环境变量。希望这有助于扩大上述答案已经提供的理解。干杯 如果使用Gradle Kotlin语法,还可以执行以下操作:
tasks.taskName {
environment(mapOf("A" to 1, "B" to "C"))
}
因此,对于test
任务,这将是:
tasks.test {
environment(mapOf("SOME_TEST_VAR" to "aaa"))
}
如果您使用的是IDE,请转到运行、编辑配置、渐变、, 选择gradle任务并更新环境变量。见下图 或者,如果您正在使用终端执行gradle命令,
只需输入'export KEY=VALUE',您的工作就完成了。另一个失败的实验:
test{systemProperty'SOME_test_VAR','aaa'environment'SOME_test_VAR','aaa'}
在测试中:boolean good=System.getenv().containsKey(“SOME_test_VAR”)| System.getProperties().containsKey(“SOME_test_VAR”);资产真实(良好)代码>即使在阅读了帮助之后,我也无法在此处使用换行符。抱歉,假设我想在哪里制作。如果您有更多信息要提供,您应该编辑您的问题。更新了问题。问题不在于Gradle。对于“测试”任务,诸如“环境”、“jvmArgs”和“系统属性”之类的内容被忽略。我拼命想弄明白为什么。我知道测试在一个单独的JVM中运行——那么至少“jvmArgs”应该可以工作,但它不能。如果您只想派生JVM,也可以使用该类。如何将其用于idea任务。在测试任务中工作良好,但不在idea中工作。请建议最好的方法。@Aditchoudhary,您应该首先将测试运行委托给Gradle。您可以在这里看到如何委派它-有时您只需找到您想要的内容…这并不适用于所有任务:无法找到参数的方法environment()。
这对我有效!当我从Gradle运行服务器时,我只想设置环境变量,这很有效。谢谢然而,systemProperty与环境变量不是一回事,对吗?