自定义gradle任务类:是否有;“施工后”;钩子?
在自定义任务类上是否有某种类型的“构造后钩子”,这样我就可以调用类特定逻辑中的自定义gradle任务类:是否有;“施工后”;钩子?,gradle,build.gradle,Gradle,Build.gradle,在自定义任务类上是否有某种类型的“构造后钩子”,这样我就可以调用类特定逻辑中的输入和输出之类的方法 假设我定义了一个定制的Gradle任务类,比如 class ExampleTask extends DefaultTask { def exFile = null } 现在,我想通过 task('ex', type: ExampleTask) { exFile = file("some-example.json") } 。。。我想在实例上自动运行相当于inputs(exF
输入
和输出
之类的方法
假设我定义了一个定制的Gradle任务类,比如
class ExampleTask extends DefaultTask {
def exFile = null
}
现在,我想通过
task('ex', type: ExampleTask) {
exFile = file("some-example.json")
}
。。。我想在实例上自动运行相当于inputs(exFile)
。处理这种配置的逻辑在哪里?我发现我可以在自定义任务类的方法上添加一个@InputFiles
装饰器,如
@InputFiles
def getFiles(){
file(exFile)
}
。。。但这似乎不是很普遍。我宁愿使用现有的
inputs()
功能,而不是重写其中的一部分。但是我不知道从哪里调用它。如果需要,可以在task类的零参数构造函数中进行这些初始化。默认属性值通常由插件设置(特别是当默认值依赖于任务类外部的信息时)。输入/输出注释应优先于输入/输出API。(后者适用于没有自己的任务类的临时任务。)我需要完全相同的东西,据我所知,答案或多或少——不,这目前是不可能的
请参见Hmm,但是零参数构造函数没有看到像
exFile
这样的配置变量。(当构造函数运行时,它们还没有被设置…)这样的默认值需要由插件设置。任务类永远不应该深入到项目模型中,因为这会使它与model.Hmm紧密耦合。我想知道我是否做得不对——我不希望任务“深入到项目模型中”。我只希望它声明自己的exFile
参数(在项目中任务创建时显式分配给它)作为输入…我明白了。我想这就是为什么存在输入/输出注释的原因之一。任务类应始终使用注释。比使用输入/输出API、静态可发现、文档的一部分等手动实现setter更干净。有一种通用方法可以引用任务的所有输入/输出文件(task.inputs.files
/task.outputs.files
)。对于解析文件,有project.files
,project.fileTree
等。