自定义任务
任务定义方式,总体分为两大类:一种是通过 Project 中的task()方法,另一种是通过tasks 对象的 create 或者register 方法。
//任务名称,闭包都作为参数println "taskA..."
task('A',{
})
//闭包作为最后一个参数可以直接从括号中拿出来println "taskB..."
task('B'){
}
//groovy语法支持省略方法括号:上面三种本质是一种
task C{
}
//action属性可以设置为闭包task(map,"D");
def map=new HashMap<String,Object>(); map.put("action",{println "taskD.."})
tasks.create('E'){//使用tasks的create方法println "taskE.."
}// 基于一个存在的task来创建,类似与继承
tasks.register("copyTask", Copy) {from("source")into("target")include("*.war")
}
register执行的是延迟创建。也即只有当task被需要使用的时候才会被创建。
//action属性可以设置为闭包,设置task自身的行为
def map = new HashMap<String, Object>();
map.put("config", "someConfigValue")
map.put("action", { println "taskD.." })
tasks.register('task1') {// 配置阶段的工作if (map.containsKey("config")) {println "配置阶段: ${map.get("config")}"}// 给任务分组group("rootTask")// 给任务添加描述信息description "这是最简单的任务"//直接设置任务开启,默认值为trueenabled(true)dependsOn = [clean]// 是否替换已存在的任务,默认为falseoverwrite = true// 基于一个存在的task来创建,类似与继承type = Delete/*** 提示 1 :task 的配置段是在配置阶段完成* 提示 2 :task 的 doFirst、doLast 方法是执行阶段完成,并且 doFirst 在 doLast 执行之前执行。* 提示 3 :区分任务的配置段和任务的行为,任务的配置段在配置阶段执行,任务的行为在执行阶段执行* */println "这是第一个自定义任务"doFirst {println("task1 doFirst")}doLast {println("task1 doLash")}// 执行阶段的工作doLast {if (map.containsKey("action")) {map.get("action").call()}}
}
// 先于 task1 中定义的 doFirst 执行
task1.doFirst {println("task1 doFirst outer")
}
// 后于 task1 中定义的 doLast 执行
task1.doLast {println("task1 doLast outer")
}
gradle命令分类及说明
常见任务
- 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] :执行自定义任务
application和java插件使用场景差异
application 插件隐式应用了 java 插件
java 插件适用场景
库项目:当你开发的是一个 Java 库,只需要将代码编译、测试并打包成 JAR 文件供其他项目使用时,使用java插件就足够了。例如,开发一个工具类库,只需要提供功能接口,不需要具备可执行性。
模块开发:在大型项目中,可能会有多个模块,每个模块只负责特定的功能。对于这些模块的开发,可以使用 java 插件进行构建和管理。
application 插件适用场景
独立应用开发:当你开发的是一个独立的 Java 应用程序,如控制台应用、桌面应用或服务器应用时,使用 application插件可以方便地创建可执行的分发文件,并直接运行应用程序。
快速开发和测试:在开发过程中,使用 application 插件的 run 任务可以快速启动应用程序进行测试,提高开发效率。