我正在尝试从Gradle构建中设置环境变量。我在MacOS X(El Capitan)上。 该命令是“gradle test”。
我在build.gradle中尝试这个:
task setenv(type: Exec) {
commandLine "export", "SOME_TEST_VAR=aaa"
}
test.dependsOn setenv
并且构建失败:
任务执行失败':myproject:setenv'。
启动进程'命令'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进行依赖注入。我可能错了,但看起来Spring框架在某处清除了这些值。
该子项目目前正在冻结,我现在无法详细检查我的猜测。
答案 0 :(得分:35)
对于测试任务,您可以使用environment property,如下所示:
test {
environment "VAR", "val"
}
您还可以在执行任务中使用environment property
task dropDatabase(type: Exec) {
environment "VAR", "val"
commandLine "doit"
}
请注意,使用此方法时,仅在任务期间设置环境变量。
答案 1 :(得分:4)
你也可以" prepend"使用'环境'环境变量设置命令:
run.doFirst { environment 'SPARK_LOCAL_IP', 'localhost' }
答案 2 :(得分:4)
这个适用于我的测试插件的设置环境变量
test {
systemProperties = [
'catalina.home': 'c:/test'
]
println "Starting Tests"
beforeTest { descriptor ->
logger.lifecycle("Running test: " + descriptor)
}
}
答案 3 :(得分:0)
在我的项目中,我有Gradle任务用于子模块中的集成测试:
task intTest(type: Test) {
...
system.properties System.properties
...
这是将所有系统参数注入测试环境的要点。 因此,现在您可以像这样运行gradle来传递具有ABC值的参数,并在代码中按$ {param}使用其值
gradle :some-service:intTest -Dparam=ABC
答案 4 :(得分:0)
如果您在Gradle之外定义了全局环境变量,
test {
environment "ENV_VAR", System.getenv('ENV_VAR')
useJUnitPlatform()
}
答案 5 :(得分:0)
请尝试以下一种选择:
task RunTest(type: Test) {
systemProperty "spring.profiles.active", System.getProperty("DEV")
include 'com/db/project/Test1.class'
}
答案 6 :(得分:0)
这看起来像是一个旧线程,但是在Gradle任务中我们可以如何设置环境变量还有另一个变种。
task runSomeRandomTask(type: NpmTask, dependsOn: [npmInstall]) {
environment = [ 'NODE_ENV': 'development', BASE_URL: '3000' ]
args = ['run']
}
上面的Gradle任务集成了Gradle和npm任务。
这样,我们可以传递多个环境变量。希望这有助于拓宽以上答案已经提供的理解。干杯!
答案 7 :(得分:0)
如果您使用的是 IDE,请转到运行、编辑配置、gradle、 选择 gradle 任务并更新环境变量。见下图。
或者,如果您使用终端执行 gradle 命令, 只需输入“export KEY=VALUE”,您的工作就完成了。
答案 8 :(得分:-1)
如果您使用Gradle Kotlin语法,也可以执行以下操作:
tasks.taskName {
environment(mapOf("A" to 1, "B" to "C"))
}
对于test
任务,应为:
tasks.test {
environment(mapOf("SOME_TEST_VAR" to "aaa"))
}