Gradle 可选 @Input

And*_*mov 5 gradle build.gradle gradle-plugin gradle-task

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

class CustomTask extends DefaultTask {

    @Input
    Closure preconfig

    // ...    
}
Run Code Online (Sandbox Code Playgroud)

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

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

class CustomTask extends DefaultTask {

    @Input
    Closure preconfig

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

    // ...   
}
Run Code Online (Sandbox Code Playgroud)

And*_*mov 7

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

例子:

class CustomTask extends DefaultTask {

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

    // ...    
}
Run Code Online (Sandbox Code Playgroud)

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

// ...

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

// ...
Run Code Online (Sandbox Code Playgroud)

还有有用的注释@Optional

class CustomTask extends DefaultTask {

    @Input @Optional
    Closure preconfig

    // ...    
}
Run Code Online (Sandbox Code Playgroud)