InputChanges

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)

參數的變更。

腳本區塊

沒有腳本區塊

屬性詳細資訊

boolean incremental (唯讀)

指出 Gradle 是否有可能判斷哪些輸入檔案相較於先前的執行已過時。當歷史記錄不可用(即,此工作片段從未執行過),或者非檔案輸入屬性或輸出檔案發生變更時,增量輸入不可用。

true

false

方法詳細資訊

Iterable<FileChange> getFileChanges(FileCollection parameter)

參數的變更。

InputChanges.isIncremental()false 時,參數的所有元素都會以 ChangeType.ADDED 傳回。

只有以 @Incremental 或 @SkipWhenEmpty 註解的輸入檔案屬性才能查詢變更。

請注意,對於具有 PathSensitivity.NONE 的輸入,檔案修改可能會報告為一對 ChangeType.ADDEDChangeType.REMOVED 事件,而不是 ChangeType.MODIFIED 事件。

Iterable<FileChange> getFileChanges(Provider<? extends FileSystemLocation> parameter)

參數的變更。

InputChanges.isIncremental()false 時,參數的所有元素都會以 ChangeType.ADDED 傳回。

此方法允許查詢 RegularFilePropertyDirectoryProperty 類型的屬性的變更。這兩種類型通常用於 @InputFile 和 @InputDirectory 屬性。

只有以 @Incremental 或 @SkipWhenEmpty 註解的輸入檔案屬性才能查詢變更。

請注意,對於具有 PathSensitivity.NONE 的輸入,檔案修改可能會報告為一對 ChangeType.ADDEDChangeType.REMOVED 事件,而不是 ChangeType.MODIFIED 事件。