如何在 Gradle 任务中制作最新的检查通知非文件参数?

How to make up-to-date check notice non-file arguments in a Gradle Task?

假设我有一个任务 class MyTask 读取一个输入文件,对其进行一些转换并写入一个输出文件 (build.gradle):

class MyTask extends DefaultTask {
    @InputFile File input
    @OutputFile File output
    String conversion

    @TaskAction void generate() {
        def content = input.text
        switch (conversion) {
            case "lower":
                content = content.toLowerCase()
                break;
            case "upper":
                content = content.toUpperCase()
                break;
        }
        output.write content
    }
}

project.task(type: MyTask, "myTask") {
    description = "Convert input to output based on conversion"
    input = file('input.txt')
    output = file('output.txt')
    conversion = "upper"
}

现在一切正常,当我在文件系统中更改 input.txt 或删除 output.txt 时,它会再次执行。 问题是 如果我将 "upper" 更改为 "lower",它不会执行,这是错误的。

我不能(不想)将 build.gradle 放入输入列表中,因为那会是一种 hack,如果命令行参数改变了进入的内容,也不会起作用myTask.conversion 字段。我想到的另一个方法是用 setConversion() 方法将值写入文件并将其放在 inputs 列表中,但同样,这是一种 hack。

如何让 gradle 注意到 官方 方式的变化? 另外如果你知道我在哪里可以阅读更多关于这个,不要阻止链接 ;)

我读了 More about Tasks and Writing Custom Plugins,但它没有给我任何线索。

不确定是否有帮助,但我会尝试:

class MyTask extends DefaultTask {
    @InputFile File input
    @OutputFile File output
    String conversion

    @TaskAction void generate() {
        def content = input.text
        switch (conversion) {
            case "lower":
                content = content.toLowerCase()
                break;
            case "upper":
                content = content.toUpperCase()
                break;
        }
        output.write content
    }

    void setConversion(String conversion) {
       this.inputs.property('conversion', conversion)
       this.conversion = conversion
    }
}

你能查一下吗?

有一个方便的 @Input annotation, which is the same as (check its source code),但更简洁:

@Optional @Input String conversion

这里有一个 Gradle goodness article 关于这个的。