在init.gradle任务中访问项目构建变量

时间:2016-07-30 07:19:23

标签: gradle build.gradle

我试图找出,如何在build.gradle中设置变量并在init.gradle脚本中访问该变量。

请在下面找到示例构建脚本: -

gradle.allprojects{

    task CommonTasks{
        println "CommonTasks - loaded"
    }

    CommonTasks.doFirst{
        println "CommonTasks - doFirst : here i want to use variable, that is declared in project build"
    }

    CommonTasks.doLast{
        println "CommonTasks - doLast"
    }

}

另见以下示例项目构建: -

apply plugin : 'java'

//some-where here i want to pass a variable in CommonTasks
clean.dependsOn CommonTasks

请建议如何在init.gradle页面上访问项目build.gradle变量(例如,String或File type)。

1 个答案:

答案 0 :(得分:0)

很大程度上,您只需要注意所有代码运行的阶段。当您运行gradle <some task>命令时,Gradle有3个阶段。

  • 初始化 - 处理init.gradle脚本,settings.gradle脚本,通常只是定义项目结构
  • 配置 - 处理所有项目的build.gradle脚本
  • 执行 - 执行请求的任务

重要的是,您可以将init.gradle脚本中的代码执行延迟到后续阶段。我在下面的示例中包含了print语句,以帮助说明此代码的执行时间。

您想要的一个选项是在任务或项目的init阶段声明属性(我的示例在任务上显示它)。这样,您可以确定该属性是在doFirst中引用该属性时定义的。 build.gradle只需要在配置时设置该变量。

<强> init.gradle

println 'init.gradle: In initialization phase'
gradle.allprojects {
  task CommonTasks {
    println 'init.gradle: In configuration phase'
    ext.myVar = null
    println "Value of myVar=${myVar}"
    doFirst {
      println 'init.gradle: In execution phase - doFirst'
      println "Value of myVar=${myVar}"
    }
    doLast {
      println 'init.gradle: In execution phase - doLast'
    }
  }
}

<强>的build.gradle

apply plugin: 'java'

// set the value
CommonTasks.myVar = 'buildValue'

clean.dependsOn CommonTasks

这应该在执行时打印出myVar=buildValue