2013-07-11 80 views
7

我正在編寫一個Gradle插件,並且通過閱讀Gradle項目中的用戶指南和插件的源代碼來學習Gradle。Gradle插件:約定與擴展

在源代碼中,我發現添加屬性的項目的2種方式:

  • 公約(由JavaBasePlugin設置和使用由JavaPlugin)
  • 擴展(由設定AnnoncePlugin並由BuildAnnouncementsPlugin使用)。

我不明白他們之間的區別和哪一個用於哪種情況。有人可以解釋嗎?

PS:有人可以在SO上添加標籤「gradle-plugin」嗎?

回答

7

我發現了forum of Gradle答案:

擴展和慣例是類似(但不完全相同)的方式來動態地擴展構建模型。擴展是更新的概念,並且已經在很大程度上取代了慣例。總之,只使用擴展名,不要使用慣例。

[...]

擴展是附加到構建模型下一個用戶定義的名稱的任意(通常用戶定義)的類的實例。擴展類可以定義任意方法。假設它附加到一個Project對象,擴展允許您添加project.foo.someMethod,但不是project.someMethod。由於每個擴展名都有自己的名稱空間(本例中爲foo),名稱衝突的機會大大減少(與慣例相比)。