什么是 Gradle - 脚本块详细信息
What are Gradle - Script block details
我想了解 build.gradle 文件的结构,尤其是脚本块详细信息部分。
举个简单的例子:
buildscript {
}
allprojects {
}
// Custom defined method that will be invoked from other parts of the script
def xmethod() {
}
subprojects {
}
我了解 xMethod(){} 是 Groovy 中定义的方法。
但是所有其他“脚本块详细信息”(如所有项目和子项目...)是什么?它们代表 Gradle 中的什么结构?他们是如何被处决的?
这里有几件事在起作用。
- 在groovy中如果你定义了一个方法:
def foo(Closure c) {
...
}
该方法有两种调用方式:
foo({ println "hello world" })
或者由于为方法定义的最后一个参数是一个闭包,你也可以这样调用它:
foo {
println "hello world"
}
当 gradle 执行 build.gradle
文件时,它会在 lifecycle phases 中执行。我建议通读该部分以了解该过程。一般来说,所有 allprojects { ... }
等块都将在配置阶段执行,即 运行 在你的任何任务 运行 之前。据我所知,buildscript { ... }
块是一种特殊情况,其中 gradle 为 build.gradle
文件本身构建了 class 路径,并且在执行任何操作之前在特殊阶段执行否则。
当 gradle 执行一个 build.gradle
文件时,它使用 gradle Project class 的一个实例作为“委托”。这意味着对于任何 gradle 无法在您的构建文件中直接找到的方法,它将尝试在项目实例中找到它们。
综上所述,语法:
buildscript {
}
实际上是对签名为 def buildscript(Closure c)
的方法的方法调用,其中 gradle 将首先在您的 build.gradle
文件中查找此方法,如果找不到,它将在项目实例和 find the buildscript method there.
您提到的所有其他电话也是如此。
了解这些的一个好地方是 gradle dsl reference,它还指向相关委托 class javadoc(如上面的项目委托)。
我想了解 build.gradle 文件的结构,尤其是脚本块详细信息部分。
举个简单的例子:
buildscript {
}
allprojects {
}
// Custom defined method that will be invoked from other parts of the script
def xmethod() {
}
subprojects {
}
我了解 xMethod(){} 是 Groovy 中定义的方法。
但是所有其他“脚本块详细信息”(如所有项目和子项目...)是什么?它们代表 Gradle 中的什么结构?他们是如何被处决的?
这里有几件事在起作用。
- 在groovy中如果你定义了一个方法:
def foo(Closure c) {
...
}
该方法有两种调用方式:
foo({ println "hello world" })
或者由于为方法定义的最后一个参数是一个闭包,你也可以这样调用它:
foo {
println "hello world"
}
当 gradle 执行
build.gradle
文件时,它会在 lifecycle phases 中执行。我建议通读该部分以了解该过程。一般来说,所有allprojects { ... }
等块都将在配置阶段执行,即 运行 在你的任何任务 运行 之前。据我所知,buildscript { ... }
块是一种特殊情况,其中 gradle 为build.gradle
文件本身构建了 class 路径,并且在执行任何操作之前在特殊阶段执行否则。当 gradle 执行一个
build.gradle
文件时,它使用 gradle Project class 的一个实例作为“委托”。这意味着对于任何 gradle 无法在您的构建文件中直接找到的方法,它将尝试在项目实例中找到它们。
综上所述,语法:
buildscript {
}
实际上是对签名为 def buildscript(Closure c)
的方法的方法调用,其中 gradle 将首先在您的 build.gradle
文件中查找此方法,如果找不到,它将在项目实例和 find the buildscript method there.
您提到的所有其他电话也是如此。
了解这些的一个好地方是 gradle dsl reference,它还指向相关委托 class javadoc(如上面的项目委托)。