次の 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
ユーザーがを 2 つの異なる方法で使用できるプラグインをユーザーに提供したいと考えています。
第1の方法
を使用して、次のような構成ブロックでGreetingPluginExtension
プラグイン提供のタスクを構成します。hello
greeting {
message = 'Hi'
greeter = 'Gradle'
}
2番目の方法
ユーザーがタスクを明示的に定義/作成し、次のようにタスク定義で必要な値を設定できるようにします。
task helloDirect(type: GreetigTask) {
message = "howdy"
greeter = "direct task"
}
message
オブジェクトから直接andgreeter
プロパティを使用GreetingTask
して挨拶を出力するか、 task-action を use に変更できることがわかりましたproject.greeting.message
。
柔軟性を高めるにはどうすればよいですか? ユーザーに両方を使用するオプションを提供したいと考えています。