到此,我個(gè)人覺得 Gradle 相關(guān)的內(nèi)容都講完了。很難相信我僅花了 1 個(gè)小時(shí)不到的時(shí)間就為實(shí)例 2 添加了 gradle 編譯支持。在一周以前,我還覺得這是個(gè)心病?;叵雽W(xué)習(xí) gradle 的一個(gè)月時(shí)間里,走過不少?gòu)澛?,求解問題的思路也和最開始不一樣:
最開始的時(shí)候,我一直把 gradle 當(dāng)做腳本看。然后到處到網(wǎng)上找怎么配置 gradle??赡苣芫幾g成功,但是完全不知道為什么。比如 NameDomainObjectContainer,為什么有 debug、release。能自己加別的嗎?不知道怎么加,沒有章法,沒有參考。出了問題只能 google,找到一個(gè)解法,試一試,成功就不管。這么搞,心里不踏實(shí)。
另外,對(duì)語法不熟悉,尤其是 Groovy 語法,雖然看了下快速教材,但總感覺一到 gradle 就看不懂。主要問題還是閉包,比如 Groovy 那一節(jié)寫得文件拷貝的例子中的 withOutputStream,還有 gradle 中的 withType,都是些啥玩意?。?
所以后來下決心先把 Groovy 學(xué)會(huì),主要是把自己暴露在閉包里邊。另外,Groovy 是一門語言,總得有 SDK 說明吧。寫了幾個(gè)例子,慢慢體會(huì)到 Groovy 的好處,也熟悉 Groovy 的語法了。
task myTask << {
println ' I am myTask'
}
書中說,如果代碼沒有加<<,則這個(gè)任務(wù)在腳本 initialization(也就是你無論執(zhí)行什么任務(wù),這個(gè)任務(wù)都會(huì)被執(zhí)行,I am myTask 都會(huì)被輸出)的時(shí)候執(zhí)行,如果加了<<,則在 gradle myTask 后才執(zhí)行。
尼瑪我開始完全不知道為什么,死記硬背?,F(xiàn)在你明白了嗎????
這和我們調(diào)用 task 這個(gè)函數(shù)的方式有關(guān)!如果沒有<<,則閉包在 task 函數(shù)返回前會(huì)執(zhí)行,而如果加了<<,則變成調(diào)用 myTask.doLast 添加一個(gè) Action 了,自然它會(huì)等到 grdle myTask 的時(shí)候才會(huì)執(zhí)行!
現(xiàn)在想起這個(gè)事情我還是很憤怒,API 都說很清楚了......而且,如果你把 Gradle 當(dāng)做編程框架來看,對(duì)于我們這些程序員來說,寫這幾百行代碼,那還算是事嘛??