file.isFile()} as FileFilter 这句话是添加了一个判断条件,对于传过来的dir是一个文件名的话,就不做处理了。 2.默认任务 defaultTas" />

gradle学习(3)-基础认识

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语法。

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

文章导航