Ren*_*cic 1 groovy gradle build.gradle
我想了解 build.gradle 文件的结构,特别是脚本块详细信息部分。
这是一个简单的例子:
buildscript {
}
allprojects {
}
// Custom defined method that will be invoked from other parts of the script
def xmethod() {
}
subprojects {
}
Run Code Online (Sandbox Code Playgroud)
据我了解,xMethod(){}是 Groovy 中定义的方法。
但是所有其他“脚本块详细信息”(例如所有项目和子项目)是什么?...?它们代表 Gradle 中的哪些构造?他们是如何被处决的?
这里有一些事情在起作用。
def foo(Closure c) {
...
}
Run Code Online (Sandbox Code Playgroud)
该方法可以通过两种方式调用:
foo({ println "hello world" })
Run Code Online (Sandbox Code Playgroud)
或者由于为该方法定义的最后一个参数是一个闭包,您也可以这样调用它:
foo {
println "hello world"
}
Run Code Online (Sandbox Code Playgroud)
当 gradle 执行文件时,它在生命周期阶段build.gradle
执行。我建议通读该部分以了解该过程。一般来说,所有的etc 块都将在配置阶段执行,该阶段在任何任务运行之前运行。据我了解,该块是一种特殊情况,其中 gradle 为文件本身构建类路径,并且在其他任何事情之前在特殊阶段执行。allprojects { ... }
buildscript { ... }
build.gradle
当 gradle 执行文件时,它使用gradle Project 类build.gradle
的实例作为“委托”。这意味着对于 gradle 无法直接在构建文件中找到的任何方法,它将尝试在项目实例上查找它们。
综上所述,语法:
buildscript {
}
Run Code Online (Sandbox Code Playgroud)
实际上是对具有签名的方法的方法调用def buildscript(Closure c)
,其中 gradle 将首先在您的文件中查找此方法build.gradle
,如果没有找到,它将在项目实例中查找并在那里找到 buildscript 方法。
您提到的所有其他电话也是如此。
理解这些内容的一个好地方是gradle dsl 参考,它还向您指出相关的委托类 javadocs(如上面的项目委托)。
归档时间: |
|
查看次数: |
420 次 |
最近记录: |