gradle 学习笔记(一)
gradle 简介
其实是一个项目构建工具,结合了maven 和 ant,基于groovy 语法。
构建基础
Projects 和 tasks
projects 和 tasks是 Gradle 中最重要的两个概念。
任何一个 Gradle 构建都是由一个或多个 projects 组成。每个 project 包括许多可构建组成部分。 这完全取决于你要构建些什么。举个例子,每个 project 或许是一个 jar 包或者一个 web 应用,它也可以是一个由许多其他项目中产生的 jar 构成的 zip 压缩包。一个 project 不必描述它只能进行构建操作。它也可以部署你的应用或搭建你的环境。不要担心它像听上去的那样庞大。 Gradle 的 build-by-convention 可以让您来具体定义一个 project 到底该做什么。
每个 project 都由多个 tasks 组成。每个 task 都代表了构建执行过程中的一个原子性操作。如编译,打包,生成 javadoc,发布到某个仓库等操作。
创建task的几种方法:(在build.gradle文件中,此文件为gradle的配置文件 )
task hello {
doLast { //doFirst 亦可
println 'Hello world!'
}
}
或者可以这样:
task hello << {
print("hello")
}
这里的“<<”表示向helloWorld中加入执行代码——其实就是groovy代码。Gradle向我们提供了一整套DSL,所以在很多时候我们写的代码似乎已经脱离了groovy,但是在底层依然是执行的groovy。比如上面的task关键字,其实就是一个groovy中的方法,而大括号之间的内容则表示传递给task()方法的一个闭包。
像上面定义的task类型为默认的DefaultTask类型,这个hello就是DefaultTask的对象,我们还可以明确指出task的类型,比如下面用于文件拷贝的task
task copyFile(type:Copy) {
from 'abin' //将文件夹abin的内容拷贝到文件夹lben中(build.gradle 所处目录)
into 'lben'
}
task 之间可以存在依赖关系(先执行taskB):
task taskA(dependsOn: taskB) {
doFirst {
//
}
}
Gradle的Project从本质上说只是含有多个Task的容器,一个Task与Ant的Target相似,表示一个逻辑上的执行单元。我们可以通过很多种方式定义Task,所有的Task都存放在Project的TaskContainer中。
每一个task类型都会包含很多Property,其中有Gradle为每个Task默认定义的Property,比如description,logger等。另外,每一个特定的Task类型还可以含有特定的Property,比如Copy的from和to等。当然,我们还可以动态地向Task中加入额外的Property。在执行一个Task之前,我们通常都需要先设定Property的值,Gradle提供了多种方法设置Task的Property值。
我们可以在定义task的时候进行配置
task hello7 << {
description = "this is hello7"
println description
}
也可以为一个已经存在的task,通过闭包的形式进行配置,对上面的hello7来说
hello7 {
description = "this is hello7"
}
执行一个任务时,gradle会扫描整个文档,先对gradle进行property配置,然后在执行
浙公网安备 33010602011771号