| 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) | 参数的更改。 |
指示 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 事件。