文章目录
每一个Gradle构建都包含三个基本构建快:project, task, property
- project项目:
一个project表示一个正在构建的组件,每一个构建脚本build.gradle至少定义一个脚本
项目的属性和方法可以直接使用,不需要使用project变量 - task任务
任务动作定义了一个当任务执行时的最小工作单元 - property属性
每一个project和task都提供getter和setter访问属性
扩展属性:
1)使用ext命名空间来声明
project.ext.myProp = ‘myValue’
或者 ext{
someOtherProps =123 //key-value的形式,
}2)也可以通过gradle.properties添加属性这个属性是属于全局的位于<USER_HOME>.gradle目录下或者项目的根目录下,一个用户这个文件只有一个,可以手动创建这个gradle.properties文件(必须是这个名字,系统默认)
设置属性myprop =myvalue
3)通过命令行添加
项目属性通过-P 命令行选项提供
系统属性通过-D 命令行选项提供4)环境属性通过ORG_GRADLE_PROJECT_propertyName=someValue
1.gradle的生命周期
分为三个阶段:初始化阶段,配置阶段,执行阶段
- 初始化阶段: Gradle可以构建一个和多个项目。在初始化阶段,Gradle会确定哪些项目参与构建,并且为这些项目创建一个Project实例。
- 配置阶段: 在这个阶段,会配置project对象。将执行构建的所有项目的构建脚本。也就是说,会执行每个项目的build.gradle文件。
- 执行阶段: Gradle确定要在执行期间创建和配置的任务子集。子集由传递给gradle命令和当前目录的任务名称参数确定。 Gradle然后执行每个选定的任务。
简单点说:
初始化阶段会实例化 setting.gradle里面声明的项目,特别是多项目的时候
配置阶段主要是配置task(系统的以及自定义声明的)
执行阶段(会执行系统给定的task以及自定义task中的doFirst和doLast方法)
参考:https://www.jianshu.com/p/b9b5acf24bb6
2.使用task
2.1 声明动作
动作包含doFirst ,doLast
task printlnVersion01{
doFirst{
println ' prilnt verison firstly: $version'
}
doLast{
println ' prilnt verison last: $version'
}
}
//doLast也可以这样表示
task printlnVersion02 << { // ’<<’ 优点追加的感觉
println ' prilnt verison last: $version'
}
//也可以给现有的任务添加动作
printlnVersion02.doFirst{
println ' prilnt verison firstly: $version'
}
2.2 访问DefaultTask属性
2.2.1 logger属性
gradle提供了基于SLF4J日志库的logger实现,可以直接在脚本中使用logger属性
task printlnVersion02 << {
logger.info(' prilnt verison last: $version')
}
2.2.2 group和description属性
//作为参数赋值
task printVersion(group: 'versioning',description:'println version') << {
logger.info(' print verison last: $version')
}
//或者使用setter方法
task printVersion{
group ='versioning'
description= 'print version'
logger.info(' print verison last: $version')
}
2.3 定义task依赖
使用dependsOn来实现,gradle不能保证多个依赖的执行顺序
//多个依赖
task first << {println "first"}
task second << {println "second"}
task printlnVersion(dependsOn :[second,first]) <<{ //这里依赖的first,second不是看这里的顺序,
logger.quiet("print version")
}
//单个依赖
task third << {println "first"}
third.denpendsOn('printlnVersion')
2.4 终结器task
常用来在所以来的task执行完后清理资源使用
task first << {println "first"}
task second << {println "second"}
second.finalizedBy first //在执行了second后执行first
2.5 理解task配置
声明的task没有使用doFirst ,doLast或者‘<<’的都是task配置,这个task配置是在配置阶段构建。
2.6 声明task的inputs和outputs
gradle通过比较两个构建的task的inputs和outputs来决定task是否是最新的
,并且只有task的inputs和outputs是不同的,task任务才会执行。
注意点: inputs和outputs是在配置阶段生效,不能使用在执行阶段代码中。如果要在执行代码中使用,可以通过TaskOutputs上的upToDateWhen(Closure)方法来访问,如果闭包放回true,这个task被认为是最新的
2.5 编写自定义的task类
可以通过继承DefaultTask类来实现
2.6 挂接到构建的生命周期上
如下简单的挂接,当然还有很多,建议看官网
2.7 实现task执行图监听器
可以简单的实现TaskExecutionGraphListener接口,实现graphPopulated方法
并把这个实例注册到task图中去。建议看官网