17 java groovy encoding environment-variables gradle
我有gradle应用程序.我的主要gradle文件包含一些任务(groovy).我需要在启动我的任务时 - 环境变量"LANG"设置encoding = 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'
}
Run Code Online (Sandbox Code Playgroud)
该命令print.bat仅响应环境变量:
@echo off
echo %FOO%
Run Code Online (Sandbox Code Playgroud)
使用该命令运行构建gradle secondTask将产生:
> Task :firstTask
bar
> Task :secondTask
ECHO ist ausgeschaltet (OFF).
Run Code Online (Sandbox Code Playgroud)
所以环境变量不再存在了secondTask.
对于实际主题来说太多了,但还有另外一件重要的事情,这可能是Igor问题的原因:该方法environment不适用于每个Gradle任务.正如您在Exec-task-type的文档中所看到的,该方法environment是为Exec-task-type 显式定义的.
为了完整,我想提一下,您可以使用JavaExec-task-type及其方法将变量传递给java进程systemProperty.但是你不能environment在这里使用,因为没有为JavaExec-task-type 定义该方法.
但是,我自己仍在寻找一种方法来定义一个对整个构建有效的环境变量,而无需通过操作系统直接定义它.
据我所知,您无法从Gradle Task设置系统环境变量.
但是,可以为该过程设置环境变量.因此,如果您只需要为构建设置环境变量,请使用:
task MyTask(type: Exec) {
environment 'ENVIRONMENT_VARIABLE_NAME', 'environment_variable_value'
// run or build code that needs that environment variable
}
Run Code Online (Sandbox Code Playgroud)
您还可以根据该任务进行编译,因此如果您构建代码,则在编译之前设置环境变量:
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn MyTask
}
Run Code Online (Sandbox Code Playgroud)
与 Gradle 环境变量结合。从文件加载 问题,对于Java插件来说是..
tasks.withType(JavaExec) {
file('.env').readLines().each() {
def (key, value) = it.tokenize('=')
environment key, value
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39118 次 |
| 最近记录: |