DSL基本概念
如果要深入理解,或者进一步使用Gradle,不仅仅需要了解Gradle的一些基础知识,比如:任务,插件,依赖管理等,更重要的是知道Gradle背后的实现机制,即编写Gradle的脚本实际是在做面向对象编程。
什么是DSL? TBC
更多关于DSL的介绍,请参考 Martin Fowler关于DSL的文章。 http://martinfowler.com/bliki/DomainSpecificLanguage.html
基本概念
首先,Gradle脚本是配置脚本。当脚本执行时,它实际上是配置一个特殊类型的对象。比如,当构建脚本(build script)执行时,它是在配置一个叫做Project类型的对象。该对象称作脚本的代理对象。
脚本类型 | 代理实例 |
---|---|
Build script | Project |
Init script | Gradle |
Settings script | Settings |
代理对象上每一个属性和方法都可以在脚本中使用。
其次,每一个Gradle脚本都实现了Script接口。这个接口定义了一系列的属性和方法,同样也可以在脚本中使用。
一个构建脚本是由0个或者多个脚本句子(statements)和脚本块组成。脚本语句可以包含函数调用,属性赋值和本地变量定义。一个脚本块是一个方法调用,它将一个闭包作为参数。闭包当做是配置闭包,它会在执行时配置一些代理对象。下面展示了Gradle中的一些顶级脚本闭包:
闭包 | 描述 |
---|---|
allprojects { } | Configures this project and each of its sub-projects. |
artifacts { } | Configures the published artifacts for this project. |
buildscript { } | Configures the build script classpath for this project. |
configurations { } | Configures the dependency configurations for this project. |
dependencies { } | Configures the dependencies for this project. |
repositories { } | Configures the repositories for this project. |
sourceSets { } | Configures the source sets of this project. |
subprojects { } | Configures the sub-projects of this project. |
publishing { } | Configures the PublishingExtension added by the publishing plugin. |