给定以下 Gradle-Task/Plugin-Combination
apply plugin: GreetingPlugin
class GreetingPlugin implements Plugin<Project> {
void apply(Project project) {
project.extensions.create("greeting", GreetingPluginExtension)
def task = project.task('hello', type: GreetigTask)
//don't know how/when to populate task-properties with extension-values here.
//this does NOT work... properites don't get populated
task.message = {project.greeting.message}
task.greeter = {project.greeting.greeter}
}
}
class GreetingPluginExtension {
String message
String greeter
}
class GreetigTask extends DefaultTask {
def message
def greeter
@TaskAction
def greet() {
println "${message} from ${greeter}"
}
}
greeting {
message = 'Hi'
greeter = 'Gradle'
}
task helloDirect(type: GreetigTask) {
message = "howdy"
greeter = "direct task"
}
我想为我的用户提供一个插件,用户可以通过GreetingTask
两种不同的方式使用它。
第一种方式
使用配置块GreetingPluginExtension
来配置插件提供的任务hello
,如下所示:
greeting {
message = 'Hi'
greeter = 'Gradle'
}
第二种方式
让用户显式定义/创建任务并在任务定义中设置所需的值,如下所示:
task helloDirect(type: GreetigTask) {
message = "howdy"
greeter = "direct task"
}
我刚刚发现我可以直接从-object 使用message
and属性来打印问候语,或者将任务操作更改为 use 。greeter
GreetingTask
project.greeting.message
我怎样才能获得更大的灵活性?我希望我的用户可以选择同时使用两者。