Gradle 可选@Input

Gradle optional @Input

如何为任务提供可选的 属性?

class CustomTask extends DefaultTask {

    @Input
    Closure preconfig

    // ...    
}

这种方式要求用户在使用 CustomTask 类型定义任务时提供 preconfig 闭包作为参数。

除了定义设置属性的方法之外,如何实现声明方式?

class CustomTask extends DefaultTask {

    @Input
    Closure preconfig

    def preconfig(Closure c){
        this.preconfig = c
    }

    // ...   
}
class CustomTask extends DefaultTask {
    void setPreconfig(Closure c) {
        inputs.property("preconfig", c)
    }
    ...
}

@见TaskInputs

实际上,我找到了为 @Input 字段分配默认值的解决方案。

示例:

class CustomTask extends DefaultTask {

    @Input
    Closure preconfig = null // or { } <- empty closure

    // ...    
}

然后检查@Input变量是否不为空:

// ...

@TaskAction
def action(){
    if (preconfig) { preconfig() }
}

// ...

还有有用的注释@Optional:

class CustomTask extends DefaultTask {

    @Input @Optional
    Closure preconfig

    // ...    
}