参考文章:
Gradle学习系列之二——创建Task的多种方法(http://www.cnblogs.com/CloudTeng/p/3417970.html)
Gradle基本知识点与常用配置(https://segmentfault.com/a/1190000006915937)
Gradle 中的语法
目录
1.创建task
cmd: gradle -q [taskname]
-q 表示不打印输出日志信息。即仅显示结果。
task有两个生命周期,配置阶段和执行阶段。
1. << (追加) * 在gradle5.0后会被去掉,建议使用doLast代替。
即向任务名追加执行过程。
task hello << {
println 'hello, this world'
}
2. doLast(执行时加载)和doFirst(配置时加载)
task hello{
doLast{
println "I'm this last"
}
doFirst{
println "I'm this first"
}
}
3. tasks
所有的task都存在一个TaskContainer容器中,是Project的属性。可创建task来查看
task showTask{
println tasks.class
println tasks.size()
}
------------------------------------------------
class org.gradle.api.internal.tasks.DefaultTaskContainer_Decorated
3
4. create
可通过TaskContainer的创建方法来构造task
tasks.create(name:'createTask') {
println "i create my task..."
}
5.dependsOn
task之间的依赖
tasks.create(name:'createTask',dependsOn:'hello') {
println "i create my task..."
}
或
[taskname].dependsOn [taskname]
6.task的属性(Properties)定义
每个task有两个默认的属性 description和 logger,
特定Task会有额外的一些属性(例:Copy有from和to属性)。
使用ext自定义properties
task hello{
doLast{
println hell
println hell2
}
}
hello {
ext.hell = "Hell........"
ext.hell2 = "Hell2...."
description = "description is default's Properties"
}
2.自定义task:
@Optional:表示定义项可选
@TaskAction 表示task要执行的过程
class MyDefineTask extends DefaultTask{
@Optional
String message;
@TaskAction
def hello(){
println "my defined message: $message "
}
}
task helloMy(type: MyDefineTask){
message = "hello world.."
}
task DefineHello(type: MyDefineTask){
message = " my defined...."
}
3. Project:
Gradle在默认情况下已经为Project定义了很多Property,其中比较常用的有:
- project:Project本身
- name:Project的名字
- path:Project的绝对路径
- description:Project的描述信息
- buildDir:Project构建结果存放目录
- version:Project的版本号
1. 自定义Properties(使用ext):
ext{
pro1="I'm defined pro1"
}
或
ext.pro2 = "I'm defined pro2"
println pro2
4. Closure And Action
Closure(闭包)是一段单独的代码块,它可以接收参数,返回值,也可以被赋值给变量。即将一段代码段赋值给一个变量,
可以在调用的地方被使用。<< (Closure) 在gradle5.0已经不被使用,Action代替。
Closure cl = { task -> println "I'm $task.project.name"}
task hello2 << cl
project(':MavenCore') {
task hello2 << cl
}
project(':MavenView') {
task hello2 << cl
}
Closure cl = {task -> println "I'm $task.project.name"}
task hello2{doLast cl}
Action指一段代码段 ,一个Task由多个Action组成。