gradle学习(3)-基础认识
最后更新于:2022-04-01 06:51:25
## 1.方法的使用
~~~
task checksum <<{
fileList('../test').each{
ant.checksum(file:file,property:"cs_$file.name")
println "$file.name CheckSum : ${ant.properties["cs_$file.name"]}"
}
}
task loadfile <<{
fileList('../test').each{File file->
ant.loadfile(srcFile:file,property:file.name)
println "I'm fond of $file.name"
}
}
File[] fileList(String dir){
file(dir).listFiles({file->file.isFile()} as FileFilter).sort()
}
~~~
"->"代表赋值,有点类似[lambda](http://baike.baidu.com/link?url=pwd9-SlzkKqfbmFzEBzNdh9xUF3dxuQCNUlgldjwqz1g4AjSSCx2UxBZ36-FQqZ96YmrFEvdQ5LVxC10IoCj9q)语法。
~~~
{file->file.isFile()} as FileFilter
~~~
这句话是添加了一个判断条件,对于传过来的dir是一个文件名的话,就不做处理了。
## 2.默认任务
~~~
defaultTasks 'clean','run'
task clean <<{
println 'Default Cleaning!'
}
task run <<{
println 'Default Running!'
}
task other <<{
println "I'm not a default task"
}
~~~
默认任务就是在没有指定任务名时,这些默认的任务会被执行
~~~
qianhuis-Mac-mini:1228 qianhui$ gradle -q
Default Cleaning!
Default Running!
~~~
上面的缺省了任务名,它可以识别这个时候没有任务执行,但是它会执行默认的任务。
如果指定了任务名,看看输出是什么
~~~
qianhuis-Mac-mini:1228 qianhui$ gradle -q other
I'm not a default task
qianhuis-Mac-mini:1228 qianhui$ gradle -q run
Default Running!
~~~
它就会执行它自己的,这有点像java中某个属性的默认值,如果你赋予一个新的值,默认值就不会起作用。
在多项目的构建中,子项目可以有自己的默认任务,如果子项目没有,会默认使用继承父项目的默认任务。
3.使用DAG(有向非循环图)进行配置
gradle分配置阶段和执行阶段,配置阶段完成后,gradle就知道所有需要被执行的任务。这样我们就可以利用这些信息了解哪些任务被执行了。下面的例子来判断任务执行完成后,release任务是否被执行
~~~
task distribution <<{
println "We build the zip with version = $version"
}
task release (dependsOn :'distribution')<<{
println 'We release now'
}
gradle.taskGraph.whenReady {
taskGraph->
if(taskGraph.hasTask(release)){
version = '1.0'
}else {
version = '1.0-SNAPSHOT'
}
}
~
~~~
输出
~~~
qianhuis-Mac-mini:1228 qianhui$ gradle -q distribution
We build the zip with version = 1.0-SNAPSHOT
~~~
说明上面的DAG中存在release任务,说明release不会被执行。
~~~
qianhuis-Mac-mini:1228 qianhui$ gradle -q release
We build the zip with version = 1.0
We release now
~~~
说明上面的DAG中存在release任务,说明release会被执行。
上面的代码中需要注意的一点是whenReady,它会在任务执行前起作用。