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() }
{file->file.isFile()} as FileFilter
这句话是添加了一个判断条件,对于传过来的dir是一个文件名的话,就不做处理了。
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!
在多项目的构建中,子项目可以有自己的默认任务,如果子项目没有,会默认使用继承父项目的默认任务。
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,它会在任务执行前起作用。