输入变化

API文档:InputChanges

提供对需要由增量工作操作处理的任何输入文件的访问。

增量工作操作是接受单个InputChanges参数的操作。然后,工作操作可以查询自上次执行以来输入参数发生了什么更改,以仅处理更改。以下示例显示了一个反转每个输入文件中文本的任务。它演示了如何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> getFileChangesFileCollection范围)

参数的更改。

InputChanges.isIncremental()false时,参数的所有元素都返回为ChangeType.ADDED

只能查询 用 @Incremental或 @ 注释的输入文件属性的更改。SkipWhenEmpty

请注意,对于带有PathSensitivity.NONE, 而不是ChangeType.MODIFIED事件的输入,文件修改可以报告为一对ChangeType.ADDEDChangeType.REMOVED事件。

Iterable<FileChange> getFileChanges(范围)Provider<? extends FileSystemLocation>

参数的更改。

InputChanges.isIncremental()false时,参数的所有元素都返回为ChangeType.ADDED

此方法允许查询类型属性RegularFilePropertyDirectoryProperty更改。这两种类型通常用于@InputFile和@InputDirectory属性。

只能查询 用 @Incremental或 @ 注释的输入文件属性的更改。SkipWhenEmpty

请注意,对于带有PathSensitivity.NONE, 而不是ChangeType.MODIFIED事件的输入,文件修改可以报告为一对ChangeType.ADDEDChangeType.REMOVED事件。