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