Gradle 構(gòu)建腳本

Gradle 提供一種領(lǐng)域特定語言或者說是 DSL,來描述構(gòu)建。這種構(gòu)建語言基于 Groovy .

在構(gòu)建的每一個項目中,Gradle 創(chuàng)建了一個 Project 類型的實例,并在構(gòu)建腳本中關(guān)聯(lián)此 Project 對象。當(dāng)構(gòu)建腳本執(zhí)行時,它會配置此 Project 對象:

  • 在構(gòu)建腳本中,你所調(diào)用的任何一個方法,如果在構(gòu)建腳本中未定義,它將被委托給 Project 對象。
  • 在構(gòu)建腳本中,你所訪問的任何一個屬性,如果在構(gòu)建腳本里未定義,它也會被委托給 Project 對象。
    在生成腳本中未定義的屬性,第一次使用時自動委托到 Project 對象。其他語句使用了在任何構(gòu)建腳本中可以訪問的 project 屬性,則返回關(guān)聯(lián)的 Project 對象。只有當(dāng)定義的屬性或方法 Project 對象的一個成員相同名字時,才需要使用 project 屬性來表明使用的是project的屬性。
    標(biāo)準(zhǔn) project 常用屬性:
標(biāo)準(zhǔn) project 常用屬性

當(dāng) Gradle 執(zhí)行一個腳本時,它將腳本編譯為一個實現(xiàn)了 Script 接口的類。這意味著所有由該Script 接口聲明的屬性和方法在我們的腳本中都是可用的。

有兩類可以在生成腳本中聲明的變量: 局部變量和額外屬性。
局部變量:是用 def 關(guān)鍵字聲明的。它們只在定義它們的范圍內(nèi)可以被訪問。局部變量是 Groovy 語言底層的一個特征。
額外屬性:在Gradle 的域模型中,所有增強的對象都可以容納用戶定義的額外的屬性。這包括但并不限于項目(project)、任務(wù)(task)和源碼集(source set)。額外的屬性可以通過所屬對象的 ext 屬性進(jìn)行添加,讀取和設(shè)置。或者,可以使用 ext 塊同時添加多個屬性。
額外屬性在任何能夠訪問它們所屬的對象的地方都可以被訪問,這使它們有著比局部變量更廣泛的作用域。父項目上的額外屬性,在子項目中也可以訪問。

Groovy 的基礎(chǔ)知識
Groovy 會自動地把一個屬性的引用轉(zhuǎn)換為對適當(dāng)?shù)?getter 或 setter 方法的調(diào)用。
調(diào)用方法時括號是可選的:
test.systemProperty 'some.prop', 'value'
test.systemProperty('some.prop', 'value')

Gradle DSL 在很多地方使用閉包。當(dāng)方法的最后一個參數(shù)是一個閉包時,你可以把閉包放在方法調(diào)用之后:
repositories {
println "in a closure"
}
repositories() { println "in a closure" }
repositories ({ println "in a closure" })

閉包委托?

參考 https://www.w3cschool.cn/gradle/tmr41htr.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容