如何通过任务在gradle中设置环境变量?
我有毕业申请。我的主要 gradle 文件包括一些任务(时髦)。我需要在启动我的任务时 - 环境变量“LANG”设置编码= ru_RU.koi8-r(对于Windows,linux),并且在完成我的任务后 - 环境变量包含初始值(en_US。UTF-8)。怎么做?请帮帮我。
我有毕业申请。我的主要 gradle 文件包括一些任务(时髦)。我需要在启动我的任务时 - 环境变量“LANG”设置编码= ru_RU.koi8-r(对于Windows,linux),并且在完成我的任务后 - 环境变量包含初始值(en_US。UTF-8)。怎么做?请帮帮我。
我不得不在这个主题上做一些研究,并试图澄清一些悬而未决的问题。我会在两条评论中这样做,但我还没有足够的声誉。由于我在其他网站上也发现了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 类型显式定义的。environment
environment
Exec
为了完整起见,我想提一下,您可以使用JavaExec
任务类型及其方法将变量传递给Java进程。但是您不能在此处使用,因为该方法不是为 -task-type 定义的。systemProperty
environment
JavaExec
但是,我自己仍在寻找一种方法来定义对整个构建有效的环境变量,而无需直接通过操作系统定义它。
据我所知,您无法从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
}