在第七章 Java構(gòu)建入門(mén)那部分我們使用了 apply() 方法,這個(gè)方法是從哪里來(lái)的呢? 我們之前說(shuō)過(guò)Gradle在構(gòu)建腳本中定義了一個(gè)項(xiàng)目. 對(duì)于構(gòu)建腳本中每個(gè)項(xiàng)目,Gradle 都創(chuàng)建了一個(gè) Project 類(lèi)型的對(duì)象用來(lái)關(guān)聯(lián)此項(xiàng)目. 當(dāng)構(gòu)建腳本執(zhí)行時(shí),它會(huì)去配置所關(guān)聯(lián)的工程對(duì)象.
構(gòu)建腳本中每個(gè)被調(diào)用的方法(這些方法并未在構(gòu)建腳本中定義)都被委托給當(dāng)前工程對(duì)象(使用工程對(duì)象引用方法)。
讓我們嘗試下如何操作工程對(duì)象的屬性.
例子:13.1 操作工程對(duì)象的屬性
build.gradle
println name
println project.name
使用 gradle -q check 命令輸出結(jié)果:
> gradle -q check
projectApi
projectApi
如您所見(jiàn),兩個(gè) println 語(yǔ)句都輸出了相同的屬性,第一個(gè)輸出使用的是自動(dòng)委托 ( auto-delegation ), 因?yàn)楫?dāng)前屬性并沒(méi)有在構(gòu)建腳本中定義. 另一個(gè)語(yǔ)句使用了項(xiàng)目一個(gè)屬性,這個(gè)屬性在任何構(gòu)建腳本中都可用,它的返回值是被關(guān)聯(lián)的工程對(duì)象. 只有當(dāng)您定義了一個(gè)屬性或者一個(gè)方法, 它的名字和工程對(duì)象的某個(gè)成員的名字相同時(shí), 你應(yīng)該使用項(xiàng)目屬性.