Last active
November 11, 2018 08:19
-
-
Save zhanggang807/8145bbe4b4e651083c5e58dfb10aa30f to your computer and use it in GitHub Desktop.
gradel概述task任务入门学习笔记
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//使用 gradle task [-q] [--quiet]来执行任务 | |
task HelloWorld { | |
doFirst { | |
println 'task at do first point---one' | |
} | |
doFirst { | |
println 'task at do first point---two' | |
} | |
//可以添加多个 | |
doLast { | |
println 'hello world! at do last point - point---one' | |
} | |
doLast { | |
println 'hello world! at do last point - point---two' | |
} | |
doFirst { | |
println 'task at do first point---three' | |
} | |
//总结 doFirst 早于 doLast,但是doFirst或doLast其中的任务没有顺序 | |
} | |
// << 这种闭关的方式已过时,5.0以后会移除掉 | |
// task HelloWorld << { | |
// println 'Hello World!' | |
// // << 与上面doLast代码等效 | |
// } | |
task startSession { | |
doLast { | |
chant() | |
} | |
} | |
//声明方法 ,用-q --quiet参数时为什么不会输出ant.echo呢? | |
def chant() { | |
ant.echo(message : 'Repeat After Me...') | |
} | |
3.times { | |
task "yayGradle$it" { //$it -> 0,1,2 一次性声明三个任务,任务名称为'xxxx$it',使用'xxxx$it’来运行 | |
doLast { | |
println 'Gradle rocks' | |
} | |
} | |
} | |
yayGradle0.dependsOn startSession //定义任务依赖 | |
yayGradle2.dependsOn yayGradle1, yayGradle0 //有多个依赖 | |
task groupTherapy (dependsOn : yayGradle2) | |
//运行 gradle groupTherapy 查看结果 | |
//列出项目中所有的task,运行 gradle tasks | |
// 这样的好像 除gradle内建 的任务不打印,加上参数--all 就会把所有的打印出来 这里面还有任务组的概念,比如help任务组下就有很多任务 | |
// 旧版本会以缩进的方式来显示任务间的依赖关系,新版本要怎么弄呢??//TODO | |
// task依赖的执行顺序 | |
// 理解Gradle并不能保证task依赖的执行顺序足很重要的。dependsOn方法只 | |
// 是定义了所依赖的task需要先执行。Gradle的思想是声明在一个给定的task执行之 | |
// 前什么该被执行,而没有定义它该如何执行。如果你之前使用过像Ant这种命令式 | |
// 地定义依赖的构建工具的话,那么Gradle的这个概念就有点难以理解了。在本章的 | |
// 后续部分你将看到,在Gradle中,执行顺序是由task的输入/输出规范自动确定的。 | |
// 这种构建设计有很多好处。一方面,你只需耍知道整个task依赖链上的关系是否发 | |
// 生改变,这样可以提高代码的可维护性和避免潜在的破坏。另一方面,因为构建没 | |
// 有严格的执行顺序,也就是支持task的并行执行,这样可以极大地节约构建执行时间 | |
// # gradle yayGradle0 groupTherapy 决定任务执行顺序,但是yayGradle0 只执行一次 不管是不是依赖 | |
// feature 支持任务名称驼峰缩写 gralde yayGradle0 与 gradel yG0 等效,但 缩写 必须 唯一才行 | |
// feature 任务排除 gradle groupTherapy -x yayGradle0, yayGradle0 和它依赖的任务将排除不执行 | |
version = '1.2' | |
task printVersion (group: 'versions', description: 'print version of project'){//使用构造器来设置task的属性 | |
//使用 gradle 内建的基于slf4j的日志 | |
logger.quiet "version $version" | |
//或者使用 setter方法 | |
group = 'versions' | |
description = 'print project version' //可以使用gradle tasks --all 来看看task的描述信息 | |
} | |
//终结器task示例 | |
task first{ | |
println 'first' | |
} | |
task second { | |
println 'second' | |
} | |
first.finalizedBy second //终结器task ,清理资源,自动执行 | |
//添加任意代码,通用groovy代码来实现功能 类POJO的POGO,自动生成getter setter | |
version = new VersionClass(1, 2)//总是调用toString来获取version的值 | |
class VersionClass { | |
Integer major | |
Integer minor | |
Boolean release | |
VersionClass(Integer major, Integer minor){ | |
this.major = major | |
this.minor = minor | |
this.release = Boolean.FALSE | |
} | |
VersionClass(Integer major, Integer minor, Boolean release){ | |
this(major, minor) | |
this.release = release | |
} | |
@Override | |
String toString(){ | |
"$major.$minor${release ? '' : '-SNAPSHOT'}" | |
} | |
} | |
//执行这个任务为什么连上面的任务都执行了???输出头是> Configure project : ,而别的都是输出 > Task :HelloWorld | |
task versionFromClass { | |
println version | |
} | |
//task配置块早于task任务执行,task配置块中可能有输出语句,所以你才会看到 | |
// gradle 构建的生命周期 初始化、配置、执行 | |
// 项目的每一次构建的配置代码都会被执行,即使你只执行了gradle tasks | |
//一个task是否执行,要看它的inputs and outputs | |
task makeReleaseVersion (group: 'versions', description: 'make Project a release version'){ | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment