摘要
通过本文,记录下gradle最基本的命令讲解。如创建gradle项目的方法、gradle基本命令以及gradle里面的基本概念等。
[TOC]
创建一个gradle项目
通过gradle init
命令
1 | cd /Documents |
上面输出提示已经很清楚了,如果不想选择直接按enter
这样一个名为gradle-demo的项目就新建完成了,项目结构如下:
1 | ├── build.gradle |
常用命令
- 通过
./gradlew tasks
来查看Task, - 通过
./gradlew properties
来查看项目的基础属性 - 通过
./gradlew 具体Task名 --scan
可以在gradle提供调试网站上查看task运行的具体信息
常用option
首先,gradle有众多的option,可以输入gradle —help查看具体帮助,而且都有详细的解释说明
1 | USAGE: gradle [option...] [task...] |
Task相关
task的特点
其实gradle中Task相关的定义都在AbstractTask.java这个类中有定义,如常见的:
doFirst、doLast、dependsOn等
几点说明:
lazy dependsOn,即被依赖的task无需提前声明
1
2
3
4
5
6
7
8
9
10
11
12task taskA {
dependsOn 'taskB'
doLast {
println 'taskA'
}
}
task taskB {
doLast {
println 'taskB'
}
}上面演示的就是taskA依赖于taskB,但taskB的声明在taskA之后
dynamic Tasks,即可以动态的添加Tasks
1
2
3
4
5
6
7
8
9task dynamicTasks {
4.times { counter ->
task "task$counter" {
doLast {
println "I'm task number $counter"
}
}
}
}上面的dynamicTasks运行后,会生成4个task,分别是task0、task1、task2、task3,且都可以单独运行
task的定义与创建
task有如下可以用如下几种方式定义与创建
1 | # 方式1 |
task的访问与获取
可以采用以下方法访问task
1 | #方式1 通过Project的属性来访问 |
task的配置
先创建一个没有默认行为的copy task
1 | task myCopy(type: Copy) |
使用gradle提供的Api配置
1
2
3
4Copy myCopy = tasks.getByName("myCopy")
myCopy.from 'resources'
myCopy.info 'target'
myCopy.include('**/*.txt', '**/*.xml', '**/*.properties')将resources目录下面所有以.txt、.xml、.properties结尾的文件拷贝到target目录
使用DSL规范语法来配置
1
2
3
4
5
6
7myCopy {
from 'resources'
into 'target'
# 直接添加到这里也可以
# include('**/*.txt', '**/*.xml', '**/*.properties')
}
myCopy.include('**/*.txt', '**/*.xml', '**/*.properties')
向task的构造函数中传参
这里遇到了点问题,直接在demo中添加@Inject注解时找不到
task的操作
这里的操作主要是指task的提供的一些API操作
动态添加依赖
1 | 4.times { counter -> |
此时运行task0,会先运行task2和task3,在运行task0
动态添加某些行为
1 | task hello { |
注意doFirst执行在doLast之前,多个doLast执行循序按其在加入Action列表的循序执行
快捷的获取task的属性
在一个task中可以很方便的获取另一个已经定义好的task的属性
1 | task anotherHello { |
注意这里要用双引号
为task添加属性
可以为一个task添加自定义属性
1 | task myTask { |
task的额外属性的添加是没有限制的,只要你想,你可以添加任意多的自定义属性