API 文件 | 任務 (Task) |
---|
任務 (Task)
代表建置中單一原子性的工作單元,例如編譯類別或產生 javadoc。
每個任務都屬於一個 專案 (Project)
。您可以使用 TaskContainer
上的各種方法來建立和查找任務實例。例如,TaskContainer.create(java.lang.String)
建立一個具有指定名稱的空任務。您也可以在建置檔案中使用 task
關鍵字
task myTask task myTask { configure closure } task myTask(type: SomeType) task myTask(type: SomeType) { configure closure }
每個任務都有一個名稱,可用於在其所屬專案中引用該任務,以及一個完全限定路徑,該路徑在所有專案中的所有任務中都是唯一的。路徑是所屬專案的路徑和任務名稱的串聯。路徑元素使用 :
字元分隔。
任務 (Task)
由一系列 Action
物件組成。當任務執行時,每個動作都會依序執行,方法是呼叫 Action.execute(T)
。您可以透過呼叫 Task.doFirst(org.gradle.api.Action)
或 Task.doLast(org.gradle.api.Action)
將動作新增至任務。
Groovy 閉包也可以用於提供任務動作。當動作執行時,將會呼叫閉包,並將任務作為參數傳遞。您可以透過呼叫 Task.doFirst(groovy.lang.Closure)
或 Task.doLast(groovy.lang.Closure)
將動作閉包新增至任務。
任務動作可以拋出 2 個特殊的例外,以中止執行並繼續而不會使建置失敗。任務動作可以透過拋出 StopActionException
來中止動作的執行並繼續執行任務的下一個動作。任務動作可以透過拋出 StopExecutionException
來中止任務的執行並繼續執行下一個任務。使用這些例外情況可讓您擁有先決條件動作,如果條件不成立,則會跳過任務或任務的一部分的執行。
任務可能相依於其他任務,或者可以排程為始終在另一個任務之後執行。Gradle 確保在執行任務時遵守所有任務相依性和排序規則,以便在執行完所有任務的相依性和任何「必須在之後執行」的任務後,再執行該任務。
任務的相依性使用 Task.dependsOn(java.lang.Object[])
或 Task.setDependsOn(java.lang.Iterable)
來控制,而 Task.mustRunAfter(java.lang.Object[])
、Task.setMustRunAfter(java.lang.Iterable)
、Task.shouldRunAfter(java.lang.Object[])
和 Task.setShouldRunAfter(java.lang.Iterable)
用於指定任務之間的排序。您可以使用以下任何類型的物件來指定相依性和排序
String
、CharSequence
或groovy.lang.GString
任務路徑或名稱。相對路徑是相對於任務的專案 (Project)
來解釋的。這可讓您參考其他專案中的任務。這些任務參考不會導致任務建立。任務 (Task)
。TaskDependency
物件。TaskReference
物件。Buildable
物件。RegularFileProperty
或DirectoryProperty
。Provider
物件。可能包含此處列出的任何類型。Iterable
、Collection
、Map
或陣列。可能包含此處列出的任何類型。iterable/collection/map/array 的元素會遞迴轉換為任務。Callable
。call()
方法可能會傳回此處列出的任何類型。其傳回值會遞迴轉換為任務。null
傳回值會被視為空集合。- Groovy
Closure
或 Kotlin 函數。閉包可以將Task
作為參數。閉包或函數可能會傳回此處列出的任何類型。其傳回值會遞迴轉換為任務。null
傳回值會被視為空集合。 - 任何其他內容都會被視為錯誤。
任務 (Task)
具有 4 個屬性「範圍」。您可以從建置檔案依名稱存取這些屬性,或呼叫 Task.property(java.lang.String)
方法。您可以透過呼叫 Task.setProperty(java.lang.String, java.lang.Object)
方法來變更這些屬性的值。
任務 (Task)
物件本身。這包括任務 (Task)
實作類別宣告的任何屬性 getter 和 setter。此範圍的屬性是可讀或可寫的,具體取決於是否存在對應的 getter 和 setter 方法。- 外掛程式新增至任務的擴充功能。每個擴充功能都以唯讀屬性的形式提供,其名稱與擴充功能相同。
- 外掛程式新增至任務的慣例屬性。外掛程式可以透過任務的
Convention
物件將屬性和方法新增至任務。此範圍的屬性可能是可讀或可寫的,具體取決於慣例物件。 - 任務的額外屬性。每個任務物件都維護一個額外屬性的映射。這些是任意的名稱 -> 值對,您可以使用它們將屬性動態新增至任務物件。一旦定義,此範圍的屬性就是可讀寫的。
外掛程式 (Plugin)
可以使用其 Convention
物件將方法新增至 任務 (Task)
。
屬性 | 描述 |
actions | 將由此任務執行的 |
ant | 此任務的 |
convention | 已棄用 此任務的 |
dependsOn | 此任務的相依性。 |
description | 此任務的描述。 |
destroyables | 此任務的可銷毀物。 |
didWork | 檢查任務是否實際執行了任何工作。即使任務執行了,它也可能確定它沒有任何事要做。例如,編譯任務可能會確定自上次執行任務以來,原始檔沒有變更。 |
enabled | 傳回此任務是否已啟用。 |
extensions | 擴充功能的容器。 |
finalizedBy | 傳回最終確定此任務的任務。 |
group | 此任務所屬的任務群組。任務群組用於報告和使用者介面中,以便在向使用者呈現任務清單時將相關任務分組在一起。 |
inputs | 此任務的輸入。 |
localState | 此任務的本機狀態。 |
logger | 此任務的記錄器。您可以在建置檔案中使用它來寫入記錄訊息。 |
logging |
|
mustRunAfter | 傳回此任務必須在其之後執行的任務。 |
name | 此任務的名稱。名稱在其 |
outputs | 此任務的輸出。 |
path | 任務的路徑,它是任務的完全限定名稱。任務的路徑是其 |
project | 此任務所屬的 |
shouldRunAfter | 傳回此任務應在其之後執行的任務。 |
state | 此任務的執行狀態。這提供有關此任務執行的資訊,例如它是否已執行、已跳過、已失敗等等。 |
taskDependencies | 傳回 |
temporaryDir | 傳回此任務可用於寫入暫存檔案的目錄。每個任務實例都提供一個單獨的暫存目錄。不保證此目錄的內容會保留到任務執行結束之後。 |
timeout | 此任務的逾時時間。 |
方法 | 描述 |
dependsOn(paths) | 將給定的相依性新增至此任務。請參閱此處以取得可用作物為任務相依性的物件類型描述。 |
doFirst(action) | 將給定的閉包新增至此任務動作清單的開頭。執行時,閉包會以此任務作為參數傳遞。 |
doFirst(actionName, action) | 將給定的 |
doFirst(action) | 將給定的 |
doLast(action) | 將給定的閉包新增至此任務動作清單的結尾。執行時,閉包會以此任務作為參數傳遞。 |
doLast(actionName, action) | 將給定的 |
doLast(action) | 將給定的 |
doNotTrackState(reasonNotToTrackState) | 不要追蹤任務的狀態。 |
finalizedBy(paths) | 為此任務新增給定的最終器任務。 |
hasProperty(propertyName) | 判斷此任務是否具有給定的屬性。請參閱此處以取得任務可用的屬性詳細資訊。 |
mustRunAfter(paths) | 指定此任務必須在所有提供的任務之後執行。 |
onlyIf(onlyIfClosure) | 僅當給定的閉包傳回 true 時,才執行任務。閉包將在任務執行時而非組態期間評估。閉包將傳遞單一參數,即此任務。如果閉包傳回 false,則將跳過任務。 |
onlyIf(onlyIfReason, onlyIfSpec) | 孵化中 僅當給定的規格滿足時,才執行任務。規格將在任務執行時而非組態期間評估。如果規格不滿足,則將跳過任務。 |
onlyIf(onlyIfSpec) | 僅當給定的規格滿足時,才執行任務。規格將在任務執行時而非組態期間評估。如果規格不滿足,則將跳過任務。 |
property(propertyName) | 傳回此任務給定屬性的值。此方法依以下方式查找屬性 |
setProperty(name, value) | 設定此任務的屬性。此方法在以下位置搜尋具有給定名稱的屬性,並在找到屬性的第一個位置設定屬性。 |
shouldRunAfter(paths) | 指定此任務應在所有提供的任務之後執行。 |
usesService(service) | 註冊此任務使用的 |
AntBuilder
ant
(唯讀)
此任務的 AntBuilder
。您可以在建置檔案中使用它來執行 ant 任務。
Convention
convention
(唯讀)
注意:此屬性已棄用,並將在下一個 Gradle 主要版本中移除。
此任務的 Convention
物件。外掛程式 (Plugin)
可以使用慣例物件為此任務貢獻屬性和方法。
String
description
此任務的描述。
TaskDestroyables
destroyables
(唯讀)
此任務的可銷毀物。
ExtensionContainer
extensions
(唯讀)
擴充功能的容器。
TaskDependency
finalizedBy
傳回最終確定此任務的任務。
String
group
此任務所屬的任務群組。任務群組用於報告和使用者介面中,以便在向使用者呈現任務清單時將相關任務分組在一起。
TaskInputs
inputs
(唯讀)
此任務的輸入。
TaskLocalState
localState
(唯讀)
此任務的本機狀態。
Logger
logger
(唯讀)
此任務的記錄器。您可以在建置檔案中使用它來寫入記錄訊息。
LoggingManager
logging
(唯讀)
LoggingManager
,可用於接收記錄並控制此任務的標準輸出/錯誤擷取。預設情況下,System.out 會以 QUIET 記錄層級重新導向至 Gradle 記錄系統,而 System.err 會以 ERROR 記錄層級重新導向。
TaskDependency
mustRunAfter
傳回此任務必須在其之後執行的任務。
String
name
(唯讀)
此任務的名稱。名稱在其 專案 (Project)
中唯一識別任務。
TaskOutputs
outputs
(唯讀)
此任務的輸出。
String
path
(唯讀)
任務的路徑,它是任務的完全限定名稱。任務的路徑是其 專案 (Project)
的路徑加上任務的名稱,並以 :
分隔。
TaskDependency
shouldRunAfter
傳回此任務應在其之後執行的任務。
TaskState
state
(唯讀)
此任務的執行狀態。這提供有關此任務執行的資訊,例如它是否已執行、已跳過、已失敗等等。
File
temporaryDir
(唯讀)
傳回此任務可用於寫入暫存檔案的目錄。每個任務實例都提供一個單獨的暫存目錄。不保證此目錄的內容會保留到任務執行結束之後。
指定此任務必須在所有提供的任務之後執行。
task taskY {
mustRunAfter "taskX"
}
對於每個提供的任務,此動作會新增一個任務「排序 (ordering)」,並且不指定任務之間的「相依性 (dependency)」。因此,即使範例中沒有先執行 'taskX',仍然可以執行 'taskY'。
請這裡參閱可用於指定排序關係的物件類型描述。
void
onlyIf
(Closure
<?>
onlyIfClosure)
Closure
<?>僅當給定的閉包傳回 true 時,才執行任務。閉包將在任務執行時而非組態期間評估。閉包將傳遞單一參數,即此任務。如果閉包傳回 false,則將跳過任務。
您可以新增多個此類謂詞 (predicate)。如果任何謂詞傳回 false,則會略過該任務。
典型用法:myTask.onlyIf { isProductionEnvironment() }
注意:此方法為實驗性功能 (incubating),並且在未來 Gradle 版本中可能會變更。
僅當給定的規格滿足時,才執行任務。規格將在任務執行時而非組態期間評估。如果規格不滿足,則將跳過任務。
您可以新增多個此類謂詞 (predicate)。如果任何謂詞傳回 false,則會略過該任務。
典型用法 (來自 Java)
myTask.onlyIf("run only in production environment", new Spec<Task>() { boolean isSatisfiedBy(Task task) { return isProductionEnvironment(); } });
僅當給定的規格滿足時,才執行任務。規格將在任務執行時而非組態期間評估。如果規格不滿足,則將跳過任務。
您可以新增多個此類謂詞 (predicate)。如果任何謂詞傳回 false,則會略過該任務。
典型用法 (來自 Java)
myTask.onlyIf(new Spec<Task>() { boolean isSatisfiedBy(Task task) { return isProductionEnvironment(); } });
傳回此任務給定屬性的值。此方法依以下方式查找屬性
- 如果此任務物件具有給定名稱的屬性,則傳回該屬性的值。
- 如果此任務具有給定名稱的擴充功能 (extension),則傳回該擴充功能。
- 如果此任務的慣例物件 (convention object) 具有給定名稱的屬性,則傳回該屬性的值。
- 如果此任務具有給定名稱的額外屬性 (extra property),則傳回該屬性的值。
- 如果找不到,則拋出
MissingPropertyException
設定此任務的屬性。此方法在以下位置搜尋具有給定名稱的屬性,並在找到屬性的第一個位置設定屬性。
- 任務物件本身。例如,
enabled
專案屬性。 - 任務的慣例物件 (convention object)。
- 任務的額外屬性 (extra properties)。
如果找不到該屬性,則會拋出 MissingPropertyException
。
TaskDependency
shouldRunAfter
(Object
...
paths)
Object
...指定此任務應在所有提供的任務之後執行。
task taskY {
shouldRunAfter "taskX"
}
對於每個提供的任務,此動作會新增一個任務「排序 (ordering)」,並且不指定任務之間的「相依性 (dependency)」。因此,即使範例中沒有先執行 'taskX',仍然可以執行 'taskY'。
請這裡參閱可用於指定排序關係的物件類型描述。
void
usesService
(Provider
<? extends BuildService
<?>>
service)
Provider
<? extends BuildService
<?>>註冊此任務使用的 BuildService
,以便可以遵守 BuildServiceRegistration.getMaxParallelUsages()
。
對於宣告為 ServiceReference
的任務屬性,這並非必要。