2017-07-30 46 views
0

我想了解如何在引擎蓋下解釋gradle構建腳本。Gradle任務內聯配置如何在引擎蓋下工作?

我得到整個構建腳本委託給項目的對象,所以,當我們鍵入

task taskName 

我們正在執行與任務,將項目命名爲對象定義的函數,並採取一個字符串參數。

是什麼奇怪的,我是任務的串列式結構:

taskName.description = "Description of the task" 
taskName.group = "Group of the task" 

如何這真的工作在項目對象的水平?

回答

0

請看https://docs.gradle.org/current/dsl/org.gradle.api.Project.html,這是第一個「屬性」部分。

這裏有一些的去除細節有用位:

一個項目有5財產「範圍」,其搜索性能。示波器是:

  • 項目對象本身。
  • 該項目的額外屬性。
  • 由插件添加到項目的擴展。
  • 該項目的任務。

從項目的父項繼承的額外屬性和約定屬性,遞歸直到根項目。此作用域的屬性是隻讀的。

當讀取一個屬性時,項目按順序搜索上述範圍,並從第一個範圍返回它找到該屬性的值。如果未找到,則拋出異常。

在你的榜樣,taskName.description = "..."意味着搖籃查找taskName作爲Project的方法,作爲一個額外的屬性,作爲一個擴展,然後,它會發現該名稱的任務。然後,您只需在Task對象上調用setDescription即可。

魔術發生在Project.property()使用配置,像這樣一個ExtensibleDynamicObjecthttps://github.com/gradle/gradle/blob/0b9cb4429513297e03965b0578607d10a2a1fcdf/subprojects/core/src/main/java/org/gradle/api/internal/project/DefaultProject.java#L226-L230

+0

謝謝您的答覆,我發現非常有幫助的,但是沒有什麼宣佈新任務的階段之間究竟發生說明作爲財產訪問它的階段! 我想知道這是如何在引擎蓋下,如何基於一個函數的調用創建一個新的任務,然後我們可以作爲一個屬性訪問此任務? 再次感謝您。 –

+1

是否可以將該任務添加爲項目對象的動態屬性? –

+0

當您創建任務時,它會被添加到任務列表中。這是在尋找不是Project上的某個方法時所檢查的同一個任務列表,它是一個額外的屬性或擴展。這一切都是作爲動態查找屬性的一部分。 – bigguy

相關問題