InputChanges

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> getFileChanges(FileCollection parameter)

参数的更改。

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

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

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

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

参数的更改。

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

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

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

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