Gradle的术语评估与执行之间的区别

Xel*_*ian 13 evaluation build execution gradle

我是Gradle构建工具的新手,现在我正在阅读用户指南,但无法完全理解评估和执行阶段之间的区别.

在配置阶段,项目对象已配置并且已创建DAG,但我们有afterEvaluate,那么在此处评估什么?评估任务依赖性还是什么?

Joa*_*son 19

正如您在文档中看到的,有三个阶段:初始化,配置和执行.每个步骤都从根项目遍历到子项目,以进行多项目构建.当您要根据子项目中的配置配置特定项目时,afterEvaluate在多项目构建的根gradle文件中很有用.

假设您要为已定义特定插件的所有子项目添加任务.如果添加到根项目:

subprojects {subProject ->
  if ( subProject.plugins.hasPlugin('myplugin')){
    subProject.task('newTask')<<{
      println "This is a new task"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

由于在子项目之前配置了根项目,因此永远不会添加此任务.添加afterEvaluate将为您解决此问题:

subprojects {subProject ->
  afterEvaluate{
    if ( subProject.plugins.hasPlugin('myplugin')){
      subProject.task('newTask')<<{
        println "This is a new task"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 是的,你是对的.除了在项目配置完成后运行的`project.afterEvaluate`之外,还有一个`gradle.projectsEvaluated`钩子,它在配置完所有项目后运行. (8认同)
  • 那么**afterEvaluate**可以在剩下的配置完成后配置一些项目吗?类似于 doLast,但不适用于单独的任务,**afterEvaluate** 将其配置放在其他配置之后和执行之前。那么评估是在配置结束之后执行之前执行的吗?我对吗? (2认同)