Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/windows-phone-8/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自定义gradle任务类:是否有;“施工后”;钩子?_Gradle_Build.gradle - Fatal编程技术网

自定义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
等。