如何通过任务在gradle中设置环境变量?

我有毕业申请。我的主要 gradle 文件包括一些任务(时髦)。我需要在启动我的任务时 - 环境变量“LANG”设置编码= ru_RU.koi8-r(对于Windows,linux),并且在完成我的任务后 - 环境变量包含初始值(en_US。UTF-8)。怎么做?请帮帮我。


答案 1

我不得不在这个主题上做一些研究,并试图澄清一些悬而未决的问题。我会在两条评论中这样做,但我还没有足够的声誉。由于我在其他网站上也发现了Igor Ganapolsky的评论,但每次都没有答案,我觉得有必要在这里写另一个答案,即使问题实际上已经回答了。

正如Martin Rajniak所说,你可以像他展示的那样设置一个环境变量。但该变量仅对定义它的任务或相应的流程分别有效。这意味着您不能在后续的另一个任务中使用它。我通过定义两个依赖的任务来验证这一点,如下所示:

task('firstTask', type:Exec) {
    environment "FOO", "bar"

    workingDir '.'
    commandLine 'cmd', '/c', 'print.bat'
}

task ('secondTask', type:Exec) {
    dependsOn firstTask

    workingDir '.'
    commandLine 'cmd', '/c', 'print.bat'
}

该命令仅回显环境变量:print.bat

@echo off
echo %FOO%

使用以下命令运行构建将产生:gradle secondTask

> Task :firstTask
bar

> Task :secondTask
ECHO ist ausgeschaltet (OFF).

因此,环境变量不再存在。secondTask

对于实际主题来说,这么多,但还有另一件重要的事情,这可能是Igor问题的原因:该方法并非可用于每个Gradle任务。正如您在 Exec-task 类型的文档中看到的那样,该方法是为 -task 类型显式定义的。environmentenvironmentExec

为了完整起见,我想提一下,您可以使用JavaExec任务类型及其方法将变量传递给Java进程。但是您不能在此处使用,因为该方法不是为 -task-type 定义的。systemPropertyenvironmentJavaExec

但是,我自己仍在寻找一种方法来定义对整个构建有效的环境变量,而无需直接通过操作系统定义它。


答案 2

据我所知,您无法从Gradle Task设置系统环境变量。

但是,可以为该进程设置环境变量。因此,如果您需要仅为构建设置环境变量,请使用以下命令:

task MyTask(type: Exec) {
  environment 'ENVIRONMENT_VARIABLE_NAME', 'environment_variable_value'

  // run or build code that needs that environment variable
}

您还可以使编译依赖于该任务,因此,如果您构建代码,请在编译之前设置环境变量:

tasks.withType(JavaCompile) {
  compileTask -> compileTask.dependsOn MyTask
}

推荐