API 文件 | InputChanges |
---|
提供對增量工作動作需要處理的任何輸入檔案的存取權。
增量工作動作是接受單一 InputChanges
參數的動作。然後,工作動作可以查詢自上次執行以來輸入參數的變更,以僅處理變更。以下範例顯示一個 Task,它反轉每個輸入檔案中的文字。它示範如何使用 InputChanges
僅處理已變更的檔案。
abstract class IncrementalReverseTask extends DefaultTask { @Incremental @InputDirectory abstract DirectoryProperty getInputDir() @OutputDirectory abstract DirectoryProperty getOutputDir() @TaskAction void execute(InputChanges inputChanges) { inputChanges.getFileChanges(inputDir).each { change -> if (change.fileType == FileType.DIRECTORY) return def targetFile = outputDir.file(change.normalizedPath).get().asFile if (change.changeType == ChangeType.REMOVED) { targetFile.delete() } else { targetFile.text = change.file.text.reverse() } } } }
如果 Gradle 無法判斷哪些輸入檔案需要重新處理,則所有輸入檔案都將報告為 ChangeType.ADDED
。當發生此類完全重建時,輸出的工作檔案會在執行工作動作之前移除。發生這種情況的情況包括
- 先前執行沒有可用的歷史記錄。
- 自上次執行以來,非檔案輸入參數已變更。
- 自上次執行以來,一個或多個輸出檔案已變更。
屬性 | 描述 |
incremental | 指出 Gradle 是否有可能判斷哪些輸入檔案相較於先前的執行已過時。當歷史記錄不可用(即,此工作片段從未執行過),或者非檔案輸入屬性或輸出檔案發生變更時,增量輸入不可用。 |
方法 | 描述 |
getFileChanges(parameter) | 參數的變更。 |
getFileChanges(parameter) | 參數的變更。 |
指出 Gradle 是否有可能判斷哪些輸入檔案相較於先前的執行已過時。當歷史記錄不可用(即,此工作片段從未執行過),或者非檔案輸入屬性或輸出檔案發生變更時,增量輸入不可用。
當 true
時
當 false
時
Iterable
<FileChange
>
getFileChanges
(FileCollection
parameter)
Iterable
<FileChange
>參數的變更。
當 InputChanges.isIncremental()
為 false
時,參數的所有元素都會以 ChangeType.ADDED
傳回。
只有以 @Incremental
或 @SkipWhenEmpty
註解的輸入檔案屬性才能查詢變更。
請注意,對於具有 PathSensitivity.NONE
的輸入,檔案修改可能會報告為一對 ChangeType.ADDED
和 ChangeType.REMOVED
事件,而不是 ChangeType.MODIFIED
事件。
Iterable
<FileChange
>
getFileChanges
(Provider
<? extends FileSystemLocation
>
parameter)
Iterable
<FileChange
>Provider
<? extends FileSystemLocation
>參數的變更。
當 InputChanges.isIncremental()
為 false
時,參數的所有元素都會以 ChangeType.ADDED
傳回。
此方法允許查詢 RegularFileProperty
和 DirectoryProperty
類型的屬性的變更。這兩種類型通常用於 @InputFile
和 @InputDirectory
屬性。
只有以 @Incremental
或 @SkipWhenEmpty
註解的輸入檔案屬性才能查詢變更。
請注意,對於具有 PathSensitivity.NONE
的輸入,檔案修改可能會報告為一對 ChangeType.ADDED
和 ChangeType.REMOVED
事件,而不是 ChangeType.MODIFIED
事件。