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

在配置阶段,将配置项目对象并创建DAG,但是afterEvaluate 之后有,那么这里的值是什么?评估任务的依存关系还是什么?

最佳答案

如您在文档中所见,共有三个阶段:初始化,配置和执行。每个步骤都从根项目遍历到子项目,以进行多项目构建。如果要基于子项目中的配置来配置特定项目,则afterEvaluate在多项目构建的根gradle文件中很有用。

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

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

由于根项目是在子项目之前配置的,因此永远不会添加此任务。
添加afterEvaluate将为您解决此问题:
subprojects {subProject ->
  afterEvaluate{
    if ( subProject.plugins.hasPlugin('myplugin')){
      subProject.task('newTask')<<{
        println "This is a new task"
      }
    }
  }
}

07-24 09:26