Gradle自動構建系列之-四(二) 訪問任務

訪問任務

方式一:通過任務名訪問

1、創建的任務都會作爲Project的一個屬性,屬性名就是任務名。所以可以通過任務名訪問或操縱任務;

task('createTask4')

createTask4.doLast {
     println 'access doLast'
}

方式二:TaskContainer訪問

1、前一篇博客我們說過,創建任務最終都是通過TaskContainer創建的,其實TaskContainer就是我們創建任務的集合。Project中有一個名爲tasks的TaskContainer屬性,我們可以通過訪問集合的方式訪問創建的任務;

形式:tasks[‘任務名’]

task("createTask5")
tasks["createTask5"].doLast {
    println "createTask5 doLast()"
}

“[]”這兒並不是集合,而是一個操作符,Groovy中的操作符都有一個對應方法,我們可以重載操作符;a[b]對應的方法是a.getAt(b),tasks[“createTask5”]對應的就是tasks.getAt(“createTask5”)這個方法。查看Gradle源碼最後發現調用的是findByname(String name)實現的;

2、通過名稱訪問:有兩種方式get和find兩種

tasks.findByName("createTask6").doLast {
    println "doLast()"

}
tasks.getByName("createTask6").doLast {
    println "doLast()"
}

3、通過路徑訪問:

有兩種方式:getByPath(String name)和findByPath(String name);這兩種方式區別是:get方式在找不到該任務就會拋出UnknowTaskException異常,而find方式找不到任務就返回null

tasks.findByPath(":gradleLib:createTask6").doLast {
    println( "doLast2()")
}
tasks.getByPath("createTask6").doLast {
    println( "doLast2()")
}

還有一點需要注意的就是路徑訪問時,參數可以使路徑也可以是任務名,而名稱訪問方式只能是任務名

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章