【问题标题】:Difference between Gradle's terms evaluation and executionGradle 的术语评估和执行之间的区别
【发布时间】:2013-04-10 20:05:00
【问题描述】:

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

在配置阶段项目对象已配置并创建 DAG,但我们有 afterEvaluate,那么这里的评估是什么?评估任务依赖关系还是什么?

【问题讨论】:

    标签: build gradle execution evaluation


    【解决方案1】:

    正如您在文档中看到的,分为三个阶段:初始化、配置和执行。每个步骤都从根项目遍历到子项目以进行多项目构建。当您想要基于子项目中的配置来配置特定项目时,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"
          }
        }
      }
    }
    

    【讨论】:

    • 那么 afterEvaluate 可以在完成其余配置后配置一些项目吗?类似于 doLast 的东西,但不适用于单独的任务,afterEvaluate 将其配置放在其他配置之后和执行之前。那么评估是在配置结束之后执行之前执行的吗?我说的对吗?
    • 是的,你是对的。除了project.afterEvaluate,它在特定项目配置后运行,还有一个gradle.projectsEvaluated钩子,在所有项目配置后运行。
    • “这个任务永远不会被添加,因为根项目是在子项目之前配置的”。我无法理解该声明的相关性。
    • 一切都与时间有关。如果你试图在事物存在之前对其进行配置,就会出现问题。
    猜你喜欢
    • 2016-12-02
    • 2018-11-11
    • 2012-08-19
    • 2011-11-21
    • 2013-02-01
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多