如何从Gradle构建中设置环境变量?

时间:2016-03-31 01:15:55

标签: gradle environment-variables build.gradle

我正在尝试从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框架在某处清除了这些值。

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

9 个答案:

答案 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 任务并更新环境变量。见下图。

enter image description here

或者,如果您使用终端执行 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"))
}