Gradle配置文件拆解
gradle
配置文件里的内容其实“方法调用”,长得类似与json
,其实是groovy
中的“闭包”(Closure
)知识:把方法当作形参传递进去
java
中无法把方法当形参传递,有类似的监听(把方法放进一个类中,用匿名内部类的形式把类的对象传进去)(里面的回调就是延后执行的)【=>
闭包内容不一定马上执行】
java8
之后有了lambda
表达式,可以简化写法,实际传的还是匿名内部类的对象
闭包是最后一个参数,可以挪到()
外
buildscript
的repositories
控制dependencies
的来源,dependencies
控制插件的来源
classpath
在具体实现类中DefaultDependencyHandler.groovy
也找不到,但这个groovy
中有定义methodMissing
方法
Gradle是什么
- 是构建工具,不是语言
- 它用了
Groovy
这个语言,创造了一种DSL
,但它本身不是语言
怎么构建
- 按照
gradle
的规则(build.gradle
、settings.gradle
、gradle-wrapper
、gradle
语法)
闭包
- 相当于可以被传递的代码块
compile
,implementation
和 api
implementation
:不会传递依赖compile / api
:会传递依赖;api
是compile
的替代品,效果完全等同当依赖被传递时,二级依赖的改动会导致0级项目重新编译;当依赖不传递时,二级依赖的改动不会导致0级项目重新编译
Gradle项目结构,以及Task
项目结构
单
project
:build.gradle
多
project
:由settings.gradle
配置多个查找
settings
的顺序:- 当前目录
- 兄弟目录
master
- 父目录
Task
使用方法:
./gradlew taskName
task 的结构:
1
2
3
4
5
6
7
8
9task taskName{
初始化代码
doFirst{
task 代码
}
doLast {
task 代码
}
}doFirst()
、doLast()
和普通代码段的区别:- 普通代码段:在
task
创建过程中就会被执行,发生在configuration
阶段 doFirst()
和doLast()
:在task
执行过程中被执行,发生在execution
阶段。如果用户没有直接或间接执行task
,那么它的doLast()
和doFirst()
代码不会被执行doFirst()
和doLast()
都是task
代码,其中doFirst()
是往队列的前面插入代码,doLast()
是往队列的后面插入代码
- 普通代码段:在
task
的依赖:可以使用task taskA(dependsOn: b)
的形式来指定依赖。指定依赖后,task
会在自己执行前先执行自己依赖的task
Gradle执行的生命周期
三个阶段:
- 初始化阶段:执⾏ settings.gradle,确定主 project 和⼦ project
- 定义阶段:执⾏每个 project 的 bulid.gradle,确定出所有 task 所组成的有向⽆环图
- 执⾏阶段:按照上⼀阶段所确定出的有向⽆环图来执⾏指定的 task
在阶段之间插⼊代码:
⼀⼆阶段之间:
settings.gradle 的最后
⼆三阶段之间:
1 | afterEvaluate { |