gradle · 2020-10-31 0

Gradle中的task

一、创建任务

groovy 语法里,如果最后一个参数是闭包的时候,可以放到括号外面,然后方法的括号可以省略

每个新创建的任务都是 org.gradle.api.DefaultTask 类型

编写 build.gradle

/**
 * 第一种创建任务
 * task是Project的一个方法
 * Task task(String name) throws InvalidUserDataException;
 */
def taskA = task taskA
taskA.doLast {
    println "This is TaskA"
    println "taskA分组: ${taskA.group}"
    println "taskA描述: ${taskA.description}"
}

/**
 * 第二种创建任务
 * task是Project的一个方法
 * 可在Map参数中进行相关配置,如依赖、任务描述、组别等
 * Task task(Map<String, ?> args, String name) throws InvalidUserDataException;
 */
def taskB = task(group: BasePlugin.BUILD_GROUP, taskB, description: "描述")
taskB.doLast {
    println "This is taskB"
    println "taskB分组: ${taskB.group}"
    println "taskB描述: ${taskB.description}"
}

/**
 * 第三种创建任务
 * task是Project的一个方法
 * Task task(String name, Closure configureClosure);
 */
task taskC {
    description "taskC的描述"
    group BasePlugin.BUILD_GROUP
    doLast {
        println "This is taskC"
        println "taskC分组: ${taskC.group}"
        println "taskC描述: ${taskC.description}"
    }
}

/**
 * 第四种创建任务
 * task是Project的一个方法
 * 可在闭包中灵活配置,也可在Map参数中配置,闭包中中的配置父覆盖Map中相同的配置
 * Task task(Map<String, ?> args, String name, Closure configureClosure);
 */
def taskD = task(group: BasePlugin.BUILD_GROUP, taskD, description: "描述") {
    description "taskD的描述"
    group BasePlugin.UPLOAD_GROUP
    doLast {
        println "This is taskD"
        println "taskD分组: ${taskD.group}"
        println "taskD描述: ${taskD.description}"
    }
}

/**
 * 第五种创建任务
 * tasks是Project的一个属性,类型是TaskContainer, 使用tasks创建任务
 * Task create(String name, Closure configureClosure) throws InvalidUserDataException;
 */
def taskE = tasks.create("taskE") {
    doLast {
        println "This is taskE"
    }
}

二、自定义task

1.新建目录结构

新建子模块 buildSrc

新建目录 buildSrc/src/main/groovy

新建包 com.example.gradle

groovy 目录用于存放源码

2.编写自定义task

新建HelloWorldTask.groovy

package com.example.gradle

import org.gradle.api.DefaultTask
import org.gradle.api.tasks.Optional
import org.gradle.api.tasks.TaskAction

class HelloWorldTask extends DefaultTask {

    @Optional
    String message = 'this is message'

    @TaskAction
    def doSelf() {
        println "hello world $message"
    }
}

3.build.gradle

子模块 buildSrc 下新建 build.gradle

plugins {
    id 'groovy'
}

group 'com.example.gradle'
version '1.0-SNAPSHOT'

repositories {
    mavenLocal()
    mavenCentral()
}

dependencies {
    implementation 'org.codehaus.groovy:groovy-all:2.5.8'
    testImplementation group: 'junit', name: 'junit', version: '4.12'
}

4.使用

可在根 build.gradle 文件中使用自定义的task

def hello1 = task hello1(type: com.example.gradle.HelloWorldTask) {
    message = "I am a programmer"
    println "configuration"
}

hello1.doLast {
    println "This is hello1"
}