我有gradle应用程序。我的主要gradle文件包含一些任务(groovy)。 在开始我的任务时我需要 - 环境变量" LANG" set encoding = ru_RU.koi8-r(对于windows,linux),并在完成我的任务后 - 环境变量包含初始值(en_US.UTF-8)。 怎么样?请帮帮我。
答案 0 :(得分:7)
据我所知,您无法从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
}
答案 1 :(得分:7)
我不得不在这个主题上做一些研究,并试图澄清一些未解决的问题。我会在两条评论中这样做,但我还没有足够的声誉。由于我发现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问题的原因:
方法environment
不适用于每个Gradle任务。正如您在Exec
-task-type的文档中所看到的,方法environment
是为Exec
- 任务类型明确定义的。
要完成,我想提一下,您可以使用JavaExec
-task-type及其方法systemProperty
将变量传递给java进程。但是你不能在这里使用environment
,因为没有为JavaExec
- 任务类型定义该方法。
但是,我自己仍在寻找一种方法来定义一个对整个构建有效的环境变量,而无需通过操作系统直接定义它。
答案 2 :(得分:1)
有一个更简单的解决方案
tasks.withType(org.gradle.api.tasks.testing.Test) {
systemProperty 'host', 'DEV'
}
答案 3 :(得分:0)
与Gradle Environment variables. Load from file组合 问题,对于Java插件应该是。
tasks.withType(JavaExec) {
file('.env').readLines().each() {
def (key, value) = it.tokenize('=')
environment key, value
}
}
答案 4 :(得分:0)
尝试使用the Gradle Wrapper;在项目根文件夹中调用gradlew.sh
后,提交新文件(gradlew.bat
和gradle wrapper
),然后按以下步骤编辑它们:
gradlew.sh
中并添加:export NODE_OPTIONS=--max_old_space_size=1536
exec "$JAVACMD" "$@"
在gradlew.bat
中并添加:
例如set NODE_OPTIONS=--max_old_space_size=1536
(或类似的东西)。
之前:
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
修改所有调用gradle
到gradlew
犯错,所以没有人要再次感到悲伤。
有些人可能认为这很肮脏,其他人则认为是不错的做法-无论哪种方法都可以,并且允许我处理下一个问题;-)
答案 5 :(得分:0)
我可以解决
如果您在 build.gradle 中有类似内容 (从avro模式为文件生成Java类)
task generateJavaFromSchema(type:JavaExec) { main = 'org.apache.avro.tool.Main' args 'compile' args 'schema' args "${fileName}" args './src/main/java/' classpath = sourceSets.main.compileClasspath }
然后gradle希望出现类似“ -PfileName =。/ src / main / resources / A.avsc”的信息, 否则gradle将抱怨fileName未定义
./gradlew generateJavaFromSchema -PfileName=./src/main/resources/A.avsc
解决方法:在 gradle.properties
中设置值<pre>
fileName=./src/main/resources/A.avsc
</pre>
然后执行以下操作,但在以下情况下将使用默认值gradle.properties文件
./gradlew generateJavaFromSchema
如果需要,您仍然可以覆盖命令行
./gradlew generateJavaFromSchema -PfileName=./src/main/resources/B.avsc
希望这会有所帮助
答案 6 :(得分:-1)
要为特定任务类型设置环境变量,可以使用以下代码段。环境变量&#34; DOCKER_HOST&#34;将被设置为类型&#34; Exec&#34;。
的所有任务tasks.withType(Exec) {
environment "DOCKER_HOST", "tcp://localhost:2375"
}