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

class CustomTask extends DefaultTask {

    @Input
    Closure preconfig

    // ...
}

这样,在使用preconfig类型定义任务时,用户有义务提供CustomTask闭包作为参数。

除了定义用于设置属性的方法外,如何实现声明性方法?
class CustomTask extends DefaultTask {

    @Input
    Closure preconfig

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

    // ...
}

最佳答案

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

例子:

class CustomTask extends DefaultTask {

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

    // ...
}

然后检查@Input变量是否不为null:
// ...

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

// ...

还有有用的注释 @Optional :
class CustomTask extends DefaultTask {

    @Input @Optional
    Closure preconfig

    // ...
}

关于Gradle可选的@Input,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41566160/

10-10 08:27