Gradle:具有可变输入的任务
Gradle: task with variable inputs
任务从可以更改的项目属性或变量中获取值是否是个好主意。例如,
task mergeProperties {
def propertiesFile = new File(project.ext.file1)
def propertiesFile2 = new File(project.ext.file2)
def outputFile = new File(project.ext.file3)
inputs.files propertiesFile, propertiesFile2
outputs.file outputFile
doLast {
// merge properties
}
}
此方法可用于合并任意两个文件并通过更改 property.ext 属性写入任何文件。这是一个好主意吗? UP_TO_DATE 检查在这种情况下如何工作?
简单回答:否
只要您不提供需要上述行为的示例用例或场景,我认为让 属性 文件或命令行值决定执行逻辑是个坏主意。这就是代码(在您的 build.gradle
中)应该是关于什么的。
此外,doLast
(和doFirst
)闭包用于次要准备和清理作业,主要任务操作应由 custom task type 中的 @TaskAction
定义定义:
class Merge extends DefaultTask {
@TaskAction
def merge() {
// merge properties
}
}
task mergeProperties(type: Merge) {
inputs.files 'myInputFile1', 'myInputFile2'
outputs.file 'myOutputFile'
}
现在,一个特殊的场景(我现在无法想象)可以使用项目属性来定义输入和输出文件。
任务从可以更改的项目属性或变量中获取值是否是个好主意。例如,
task mergeProperties {
def propertiesFile = new File(project.ext.file1)
def propertiesFile2 = new File(project.ext.file2)
def outputFile = new File(project.ext.file3)
inputs.files propertiesFile, propertiesFile2
outputs.file outputFile
doLast {
// merge properties
}
}
此方法可用于合并任意两个文件并通过更改 property.ext 属性写入任何文件。这是一个好主意吗? UP_TO_DATE 检查在这种情况下如何工作?
简单回答:否
只要您不提供需要上述行为的示例用例或场景,我认为让 属性 文件或命令行值决定执行逻辑是个坏主意。这就是代码(在您的 build.gradle
中)应该是关于什么的。
此外,doLast
(和doFirst
)闭包用于次要准备和清理作业,主要任务操作应由 custom task type 中的 @TaskAction
定义定义:
class Merge extends DefaultTask {
@TaskAction
def merge() {
// merge properties
}
}
task mergeProperties(type: Merge) {
inputs.files 'myInputFile1', 'myInputFile2'
outputs.file 'myOutputFile'
}
现在,一个特殊的场景(我现在无法想象)可以使用项目属性来定义输入和输出文件。