构建块
每个Gradle构建都包含三个基本构建块,至少一个project,一个project又包含多个task,
- project
- project会被实例化org.gradle.api.Project类,并且有一个project的变量,可以使用,(这个很像jenkins pipeline中的env变量)
println "description project $name" + project.description
- task
- 任务动作 task action
- 任务依赖 task dependency
- property
- 每个project和task都可以通过getter和setter访问属性
- 扩展属性,使用ext{}定义,其他project可以通过project.ext访问
- Gradle属性,在gradle.properties中定义
- 命令行中-P指定项目属性,相当于在project中直接定义
- 命令行中-D执行系统属性,被传送给启动Gradle的jvm,作为一个系统属性被jvm使用
task
默认,每个新创建的task都是org.gradle.api.DefaultTask类型的。
基本使用
Task接口提供了俩个相关的方法来声明task动作,doFirst(闭包),doLast(闭包)
1 | |
dependsOn
定义task依赖关系
1 | |
type
type指定的类,实际上像是给task继承某个类,就是面向对象的继承特性,这样不用重复写相似的task,以下是一个自定的task
1 | |
1 | |
当然,gradle也有内置的type,比如Zip
1 | |
或者Delete
1 | |
Gradle生命周期
- 初始化,从settings.gradle创建项目数,确定project对象
- 配置,对project对象进行配置,确定依赖和顺序
- 执行,执行project内的task
hook
gradle提供了很多api,用于在各个生命周期各个节点提供hook操作
settings.gradle
1 | |
build.gradle
1 | |
dependencies && repositories
1 | |
buildScript
buildScript代码块中,一般是配置gardle脚本自身使用的资源,相当于执行python脚本需要import一些仓库,一般buildScript中都是配置dependencies和repositories,然后就可以在gradle脚本中importr相关仓库,执行命令
1 | |
apply
实际上是类似python的import了,都是用于导入其他包
1 | |
android
现在,我对gradle的使用,主要就是用来构建android的项目,当引用’com.android.library’的时候,就可以使用android块了
1 | |
多项目
实际上,一般都是多项目一起构建的,这个时候,查看setting.gradle文件就知道一共有多少个项目了,
如下
1 | |
android项目使用的是分层布局,使用包括其他项目的关键字是include,如果是平面布局,包括与根项目同一嵌套层次的项目,需要使用includeFlat方法,要使用includeFlat,平面布局
gradle多项目 说明:https://blog.csdn.net/weixin_38062353/article/details/82719968