Gradle从入门到实战-定义Task

1 Task

Task可以理解为Gradle的执行单元,实在是太重要了。根据前面的分析,Gradle通过一个个task来完成具体的构建任务,下面我们来看下Task的定义。最简单直接,通过如下方式来定义:

task myTask {
    println "config myTask"
}

// 执行下

D:\0.GitHub\seniorlibs> gradlew myTask

config myTask

2 执行

task myTask {
    println "config myTask"
}
// 执行的最开始和最后做了一些事情
myTask.doFirst {
    println "before execute myTask"
}
// doLast还有一个等价的操作leftShift,leftShift还可以缩写为<<,下面的三种实现效果等价:
myTask.doLast {
    println "after1 execute myTask"
}
myTask.leftShift {
    println "after2 execute myTask"
}
myTask << {
    println "after3 execute myTask"
}
// 1、通过gradlew myTask来查看:
// > Configure project :gradles
// config myTask
// > Task :gradles:myTask
// before execute myTask
// after1 execute myTask
// after2 execute myTask
// after3 execute myTask

// 下面三种定义也一模一样
// task myTask1 << {
//    println "after execute myTask1"
// }
// task('myTask1').doLast { // project.task('myTask1').doLast
//    println "after execute myTask1"
// }
// tasks.create('myTask1').doLast { // project.tasks.create('myTask1').doLast
//    println "after execute myTask1"
// }

// 定义Task的时候是可以指定很多参数
task myTask2 << {
    println "execute myTask1"
}
task myTask3 << {
    println "execute myTask2"
}
// 定义一个名字为myTask4的task,属于guan分组,并且依赖myTask1和myTask2两个task。
task('myTask4', group: "guan", description: "我自己的Task", dependsOn: ["myTask2", "myTask3"] ).doLast {
    println "execute myTask4"
}
// 1、通过gradlew tasks来查看:
// Guan tasks
// ----------
// myTask4 - 我自己的Task
//
// Help tasks
// ----------
// 2、通过gradlew myTask4来查看:
// > Task :gradles:myTask2
// execute myTask1
// > Task :gradles:myTask3
// execute myTask2
// > Task :gradles:myTask4
// execute myTask4

class RygTask extends DefaultTask {
    String message = 'This is RygTask'

    // @TaskAction 表示该Task要执行的动作,即在调用该Task时,hello()方法将被执行
    @TaskAction
    def hello(){
        println "hello. $message"
    }
}
// hello使用了默认的message值
task hello(type:RygTask)
// 重新设置了message的值
task hello1(type:RygTask){
    message ="hello1. I am an android developer"
}
// 1、通过gradlew hello hello1来查看:
// > Task :gradles:hello
// hello. This is RygTask
// > Task :gradles:hello1
// hello. hello1. I am an android developer

// 继承自系统已有的Task的Task:"Copy"来完成文件的拷贝操作,还有:Copy、Delete、Sync等
task copyTask(type:Copy) {
    println "copyTask type: Copy"
}
// 1、通过gradlew myTask来查看:
// > Configure project :gradles
// copyTask type: Copy

6 学习链接

全面理解Gradle - 定义Task

发布了185 篇原创文章 · 获赞 207 · 访问量 59万+

猜你喜欢

转载自blog.csdn.net/chenliguan/article/details/95864582