Gradle学习[4]——Task

Gradle学习[4]——Task

Task其实就是一段代码组成的一个逻辑。比如编译Java代码的classes Task。

Gradle 中所有操作都是基于任务完成的。

简单示例

一般使用方式:

1
2
3
4
5
6
7
8
9
10
11
task A {
enabled(true)//直接设置任务开启,默认值为true
println "root taskA" // Configuration阶段执行
doFirst(){
println "root taskA doFirst" // Execution执行
}
doLast(){
println "root taskA doLast" // Execution执行
}
}
//A.enabled = false //设置关闭任务

其他的使用方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
def map=new HashMap<String,Object>();
//action属性可以设置为闭包,设置task自身的行为
map.put("action",{println "taskD.."})
task(map,"a"){
description 'taskA description '
group "group..."
//在task内部定义doFirst、doLast行为
doFirst {
def name = 'doFirst..'
println name
}
doLast {
def name = 'doLast..'
println name
}
}
//在task外部定义doFirst、doLast行为
a.doFirst {
println it.description
}
a.doLast {
println it.group
}


// 输出结果
taskA description
doFirst..
taskD..
doLast..
group...

创建

任务创建方式,总体分为两大类:

  • 通过 Project 中的task()方法
  • 通过tasks 对象的 create 或者register 方法。

Task类型

自定义的Task是属于DefaultTask 类型,Gradle自带了一些现成的Task提供给我们,我们只需要在创建Task的时候指定一个type即可:

任务类型作用
Delete删除文件或目录
Copy将文件复制到目标目录中。此任务还可以在复制时重命名和筛选文件。
CreateStartScripts创建启动脚本
Exec执行命令行进程
GenerateMavenPom生成 Maven 模块描述符(POM)文件。
GradleBuild执行 Gradle 构建
Jar组装 JAR 归档文件
JavaCompile编译 Java 源文件
Javadoc为 Java 类 生 成 HTML API 文 档
PublishToMavenRepository将 MavenPublication 发布到 mavenartifactrepostal。
Tar组装 TAR 存档文件
Test执行 JUnit (3.8.x、4.x 或 5.x)或 TestNG 测试。
Upload将 Configuration 的构件上传到一组存储库。
War组装 WAR 档案。
Zip组装 ZIP 归档文件。默认是压缩 ZIP 的内容。

执行顺序

Gradle 的 Task 中,有三种方式可以指定 Task 执行顺序:

1、dependsOn 强依赖方式

2、通过 Task 输入输出

3、通过 API 指定执行顺序

依赖方式

参数依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
task A {
doLast {
println "TaskA.."
}
}
task 'B' {
doLast {
println "TaskB.."
}
}
//参数方式依赖: dependsOn后面用冒号
task 'C'(dependsOn: ['A', 'B']) {
doLast {
println "TaskC.."
}
}}

内部依赖

1
2
3
4
5
6
7
8
//参数方式依赖
task 'C' {
//内部依赖:dependsOn后面用 = 号
dependsOn= [A,B]
doLast {
println "TaskC.."
}
}

外部依赖

1
2
3
4
5
6
task 'C' {
doLast {
println "TaskC.."
}
}
C.dependsOn(B,'A')

跨项目依赖

在subproject01 工程的 build.gradle 文件中定义:

1
2
3
4
5
task A {
doLast {
println "TaskA.."
}
}

在subproject02 工程的 build.gradle 文件中定义:

1
2
3
4
5
6
task B{
dependsOn(":subproject01:A") //依赖根工程下的subject01中的任务A :跨项目依赖。
doLast {
println "TaskB.."
}
}

补充

当一个 Task 依赖多个Task 的时候,被依赖的Task 之间如果没有依赖关系,那么它们的执行顺序是随机的,并无影响。

执行

任务执行语法:gradle [taskName…] [–option-name…]

详细则参考官方文档,一下为整理列出的表格:

分类解释
常见的任务(*)gradle build: 构建项目:编译、测试、打包等操作
gradle run :运行一个服务,需要application 插件支持,并且指定了主启动类才能运行
gradle clean: 请求当前项目的 build 目录
gradle init : 初始化 gradle 项目使用
gradle wrapper:生成wrapper 文件夹的。
● gradle wrapper 升级wrapper 版本号:gradle wrapper –gradle-version=4.4
● gradle wrapper –gradle-version 5.2.1 –distribution-type all :关联源码用
项目报告相关任务gradle projects : 列出所选项目及子项目列表,以层次结构的形式显示
gradle tasks: 列出所选项目【当前 project,不包含父、子】的已分配给任务组的那些任务。
gradle tasks –all :列出所选项目的所有任务。
gradle tasks –group=”build setup”:列出所选项目中指定分组中的任务。
gradle help –task someTask :显示某个任务的详细信息
gradle dependencies :查看整个项目的依赖信息,以依赖树的方式显示
gradle properties 列出所选项目的属性列表
调试相关选项-h,–help: 查看帮助信息
-v, –version:打印 Gradle、 Groovy、 Ant、 JVM 和操作系统版本信息。
-S, –full-stacktrace:打印出所有异常的完整(非常详细)堆栈跟踪信息。
-s,–stacktrace: 打印出用户异常的堆栈跟踪(例如编译错误)。
-Dorg.gradle.daemon.debug=true: 调试 Gradle 守护进程。
-Dorg.gradle.debug=true:调试 Gradle 客户端(非 daemon)进程。
-Dorg.gradle.debug.port=(port number):指定启用调试时要侦听的端口号。默认值为 5005。
性能选项:【备注: 在gradle.properties 中指定这些选项中的许多选项,因此不需要命令行标志】–build-cache, –no-build-cache: 尝试重用先前版本的输出。默认关闭(off)。
–max-workers: 设置 Gradle 可以使用的woker 数。默认值是处理器数。
-parallel, –no-parallel: 并行执行项目。有关此选项的限制,请参阅并行项目执行。默认设置为关闭(off)
守护进程选项–daemon, –no-daemon: 使用 Gradle 守护进程运行构建。默认是on
–foreground:在前台进程中启动 Gradle 守护进程。
-Dorg.gradle.daemon.idletimeout=(number of milliseconds):
Gradle Daemon 将在这个空闲时间的毫秒数之后停止自己。默认值为 10800000(3 小时)。
日志选项-Dorg.gradle.logging.level=(quiet,warn,lifecycle,info,debug):
通过 Gradle 属性设置日志记录级别。
-q, –quiet: 只能记录错误信息
-w, –warn: 设置日志级别为 warn
-i, –info: 将日志级别设置为 info
-d, –debug:登录调试模式(包括正常的堆栈跟踪)
其它(*)-x:-x 等价于: –exclude-task : 常见gradle -x test clean build
–rerun-tasks: 强制执行任务,忽略up-to-date ,常见gradle build –rerun-tasks
–continue: 忽略前面失败的任务,继续执行,而不是在遇到第一个失败时立即停止执行。每个遇到的故障都将在构建结束时报告,常见:gradle build –continue。
gradle init –type pom :将maven 项目转换为gradle 项目(根目录执行)
gradle [taskName] :执行自定义任务

Gradle学习[4]——Task
https://blog.gugu.dev/2024-02-21/Gradle学习-4-——Task/
作者
MinMin
发布于
2024年2月21日
许可协议