从gradle bruildscript

时间:2016-10-28 00:08:02

标签: gradle build.gradle

我有一个buildcript,有20个不同的任务。每个任务执行一些命令,每个任务都需要一些环境变量。某些环境变量对于所有任务都是通用的,而某些环境变量则不是。在gradle中是否有办法在所有任务之上设置这些公共环境变量?或者将环境变量放在方法/任务中,并将其作为需要这些环境变量的其他任务内的第一步调用?

task task1 (type:Exec) {
      environment COMMON_ENV, VALUE1
      commandLine 'touch', 'xyz100.txt'
}

task task2 (type:Exec) {
      environment COMMON_ENV, VALUE1
      commandLine 'touch', 'xyz200.txt'
}

因此,在此示例中,task1和task2都需要相同的环境变量COMMON_ENV。那么如何在一个公共场所定义它而不是在每个任务中定义它。

记住它不是一个java项目。

以下内容无法将env变量设置为所有任务

task setEnv(type: Exec) {
      environment COMMON_ENV, VALUE1
}
task task1 (type:Exec, dependsOn: setEnv) {
      commandLine 'touch', 'xyz100.txt'//this task does not know COMMON_ENV, though it 'dependsOn' setEnv task
}

1 个答案:

答案 0 :(得分:0)

可以为所有具有相同类型的任务设置一些公共属性,您只需要另外配置它​​们,就像这样:

tasks.withType(Exec) {
    environment COMMON_ENV, VALUE1
}

task task1 (type:Exec) {
      commandLine 'touch', 'xyz100.txt'
}

task task2 (type:Exec) {
      commandLine 'touch', 'xyz200.txt'
}

注意,您可以将tasks.withType(Exec)添加到allprojectssubprojects闭包中,不仅可以配置当前项目,还可以根据需要配置所有项目或子项目。