如何在 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 关于这个的。
假设我有一个任务 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
@Optional @Input String conversion
这里有一个 Gradle goodness article 关于这个的。