一、创建任务
在 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"
}