Gradle语法总结

Gradle学习总结

Posted by Mio4kon on 2014-11-28

安装Gradle

简单来说就是下载->解压->配置环境变量.
然后利用gradle -v 来查看是否安装成功.

gradle简单入门

Hello World!

  1. 在任意文件夹中建立build.gradle文件,然后输入
1
2
3
4
task helloWorld << {
println "hello World!!!"
}

注:<<代表追加的意思.既向helloWorld这个任务加入执行过程.可以用doLash达到通样效果.

1
2
3
4
task helloWorld {
doLast {
println 'helloWorld'}
}

注: 如果需要向Task的最前面加入执行过程,我们可以使用doFirst.

  1. 终端进入该文件夹.输入命令

gradle helloWorld

  1. 结果
1
2
3
miodeMacBook-Pro:gradledemo mio$ gradle helloWorld
:helloWorld
hello World!!!

利用gradle拷贝文件

  1. 在刚才的文件夹建两个文件夹A,B
  2. 在A文件夹中随便放入什么,比如一个txt文件.
  3. 在build.gradle中添加task
1
2
3
4
task copyFile(type:Copy){
from 'A'
into 'B'
}
  1. 终端命令

gradle copyFile

  1. 然后就可以见证奇迹了.是不是很简单?

入门总结

通过上面两个例子可以发现.gradle的Task表示逻辑上比较独立的执行过程.
通过命令gradle tasks可以查看该Project中所有的Task,不仅仅是刚才我们写的还有gradle默认提供的.
如下:

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
miodeMacBook-Pro:gradledemo mio$ gradle tasks
:tasks
------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------
Build Setup tasks
-----------------
init - Initializes a new Gradle build. [incubating]
wrapper - Generates Gradle wrapper files. [incubating]
Help tasks
----------
components - Displays the components produced by root project 'gradledemo'. [incubating]
dependencies - Displays all dependencies declared in root project 'gradledemo'.
dependencyInsight - Displays the insight into a specific dependency in root project 'gradledemo'.
help - Displays a help message.
projects - Displays the sub-projects of root project 'gradledemo'.
properties - Displays the properties of root project 'gradledemo'.
tasks - Displays the tasks runnable from root project 'gradledemo'.
Other tasks
-----------
copyFile
helloWorld

创建Task的多种方法

我们之前定义的Task实际上是位于TaskContanier中的.Project中的Tasks属性就表示这个TaskContanier.

通过TaskContanier创建Task

  1. gradle文件添加:
1
2
3
4
tasks.create(name: 'hehe') << {
println 'hehe'
}
  1. 终端运行gradle hehe ,发现task创建成功了.

Task之间的依赖关系

如何让TaskA依赖TaskB?既执行A之前先执行B.可以通过下面方法声明.

1
2
3
4
5
6
7
8
task taskB<< {
println 'taskB'
}
task taskA(dependsOn:taskB)<<{
println 'taskA'
}

结果:taskB先执行–>taskA再执行

1
2
3
4
5
miodeMacBook-Pro:gradledemo mio$ gradle taskA
:taskB
taskB
:taskA
taskA

注:也可以在定义完task之后声明依赖taskA.dependsOn taskB

Task的Property

一个Task除了执行操作之外,还可以包含多个Property,其中有Gradle为每个Task默认定义的Property,比如descriptionlogger等。另外,每一个特定的Task类型还可能带有特定的Property,比如Copy的from和to等。当然,我们还可以动态地向Task中加入额外的Property。

配置Task的Property有很多方法:

  1. 在定义时配置
1
2
3
4
task taskProperty<<{
description = "this is taskProperty"
println description
}
  1. 通过调用Task的configure方法配置
1
2
3
4
5
6
7
task haha<<{
println description
}
haha.configure{
description = "this is haha for configure"
}

读懂Gradle语法

Gradle是一种声明式的构建工具。在执行时,Gradle并不会一开始便顺序执行build.gradle文件中的内容,而是分为两个阶段,第一个阶段是配置阶段,然后才是实际的执行阶段。在配置阶段,Gradle将读取所有build.gradle文件的所有内容来配置Project和Task等,比如设置Project和Task的Property,处理Task之间的依赖关系等。
Gradle的DSL只是Groovy语言的内部DSL.既必须遵循Groovy的语法规则.

DSL:领域专用语言(domain specific language)

<<待续