Gradle学习笔记
Gradle学习笔记,记录一些零散的知识点。
总结如下:
- project实例跟
build.gradle
是一一对应的 - settings实例跟
settings.gradle
是一一对应的 - project是由一系列task组成的
- task是由一系列action组成的
- task之间可能有依赖关系和顺序关系
- 所有的脚本都实现了
Script
接口 - build script的代理对象是
project
- initialization script的代理对象是
gradle
Project
There is a one-to-one relationship between a Project and a build.gradle file. A project is essentially a collection of Task objects.
project实例跟build.gradle
是一一对应的,使用build.gradle对相应的Project实例进行配置。
project是由一系列task组成的。
project的依赖
- 依赖管理
- 配置管理
- artifact管理
- 仓库管理
project的层级
Projects are arranged into a hierarchy of projects. A project has a name, and a fully qualified path which uniquely identifies it in the hierarchy.
这个项目的project hierarchy如下所示:
1 | ➜ demo ./gradlew projects -q |
project的属性和方法
A project has 5 property ‘scopes’, which it searches for properties.
project的动态属性有5种不同的scope
A project has 5 method ‘scopes’, which it searches for methods
project的动态method有5种不同的scope
Ext属性
All extra properties must be created through the “ext” namespace
1 | project.ext.prop1 = 'test' |
Settings
There is a one-to-one correspondence between a Settings instance and a settings.gradle settings file.
settings实例跟settings.gradle
是一一对应的,使用settings.gradle对相应的Settings实例进行配置
使用Settings.include()
方法指定需要构建的project
1 | include ':sub1', ':sub2' |
Script
Generally, a Script object will have a delegate object attached to it
编译后的脚本对应的类都实现了Script
接口。这个接口定义了Gradle特定的方法,可以直接在脚本中使用这些方法。
Script
实例都带有一个代理对象。比如build script有project
代理对象,而initialization script有gradle
代理对象。
apply
和buildscript
这两个我们经常使用的方法其实是来自Script
接口。
1 | apply plugin: 'java' |
Task
A Task represents a single atomic piece of work for a build. Each task belongs to a Project. A Task is made up of a sequence of Action objects.
task可能对其他task有依赖,并且对执行顺序有要求
task是由一系列action组成的
理解Gradle文档
Gradle的文档结构跟JDK的文档稍稍有所不同。JDK文档中通常只包括Properties
和Methods
,而Gradle文档还列出了一些特有的部分,具体如下:
- Dynamic Properties - 动态属性, 这里的属性可能是插件添加进来的
- Dynamic Methods - 动态方法,这里的方法可能是插件添加进来的
- Properties
- Methods
- Script blocks - 闭包
另外Gradle的类和接口可以划分成以下四大类:
- Build script blocks
- Core types
- Container types
- Task types
理解Groovy代理
TODO