Gradle 的术语评估和执行之间的区别
Posted
技术标签:
【中文标题】Gradle 的术语评估和执行之间的区别【英文标题】:Difference between Gradle's terms evaluation and execution 【发布时间】:2013-04-10 20:05:00 【问题描述】:我是 Gradle 构建工具的新手,现在我正在阅读用户指南,但无法完全理解评估阶段和执行阶段之间的区别。
在配置阶段项目对象已配置并创建 DAG,但我们有 afterEvaluate,那么这里的评估是什么?评估任务依赖关系还是什么?
【问题讨论】:
【参考方案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
钩子,在所有项目配置后运行。
“这个任务永远不会被添加,因为根项目是在子项目之前配置的”。我无法理解该声明的相关性。
一切都与时间有关。如果你试图在事物存在之前对其进行配置,就会出现问题。以上是关于Gradle 的术语评估和执行之间的区别的主要内容,如果未能解决你的问题,请参考以下文章