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,它会在任务执行前起作用。
';