考慮下面的搖籃任務/插件,組合如何構建鬆散耦合的gradle任務屬性?
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
不同的方式。
1路
使用GreetingPluginExtension
與配置塊這樣的配置插件提供的任務hello
:
greeting {
message = 'Hi'
greeter = 'Gradle'
}
第二方式
讓用戶明確定義/創建任務並在任務定義中設置所需的值,如下所示:
task helloDirect(type: GreetigTask) {
message = "howdy"
greeter = "direct task"
}
我剛剛發現,我可以直接使用message
和greeter
性質從GreetingTask
-object打印出的問候語或更改任務行動使用project.greeting.message
。
我該如何獲得更大的靈活性?我希望我的用戶可以選擇使用兩者。
+1使用 '鬆散耦合' 的老派短語。 – miltonb