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

问题描述 投票:36回答:4

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

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

gradle environment-variables build.gradle
4个回答
36
投票

对于测试任务,您可以像这样使用environment property

test {
  environment "VAR", "val"
}

你也可以在exec任务中使用environment property

task dropDatabase(type: Exec) {
    environment "VAR", "val"
    commandLine "doit"
}

请注意,使用此方法时,仅在任务期间设置环境变量。


4
投票

您还可以使用'environment'命令“预置”环境变量设置:

run.doFirst { environment 'SPARK_LOCAL_IP', 'localhost' }

4
投票

这个适用于我的测试插件的设置环境变量

test {
    systemProperties = [
        'catalina.home': 'c:/test'
    ]
    println "Starting Tests"
    beforeTest { descriptor ->
       logger.lifecycle("Running test: " + descriptor)                
    }    
}

0
投票

在我的项目中,我在子模块中进行了集成测试的Gradle任务:

task intTest(type: Test) {
...
system.properties System.properties 
...

这是将所有系统参数注入测试环境的要点。所以,现在你可以像这样运行gradle来传递具有ABC值的param并在你的代码中使用$ {param}的值

gradle :some-service:intTest -Dparam=ABC
© www.soinside.com 2019 - 2024. All rights reserved.