如何构造松散耦合的gradle任务属性?
给定以下Gradle任务/插件组合如何构造松散耦合的gradle任务属性?,gradle,Gradle,给定以下Gradle任务/插件组合 apply plugin:GreetingPlugin 类GreetingPlugin实现插件{ 无效申请(项目){ project.extensions.create(“问候语”,问候语) def task=project.task('hello',类型:GreetigTask) //不知道如何/何时在此处使用扩展值填充任务属性。 //这不起作用…属性不会被填充 task.message={project.greeting.message} task.gre
apply plugin:GreetingPlugin
类GreetingPlugin实现插件{
无效申请(项目){
project.extensions.create(“问候语”,问候语)
def task=project.task('hello',类型:GreetigTask)
//不知道如何/何时在此处使用扩展值填充任务属性。
//这不起作用…属性不会被填充
task.message={project.greeting.message}
task.greeter={project.greeting.greeter}
}
}
班级迎宾{
字符串消息
弦乐迎宾员
}
类GreetigTask扩展了DefaultTask{
def消息
def迎宾员
@任务行动
def greet(){
println“${message}来自${greeter}”
}
}
问候语{
消息='Hi'
迎宾员='Gradle'
}
任务helloDirect(类型:GreetigTask){
message=“你好”
greeter=“直接任务”
}
我想为我的用户提供一个插件,用户可以通过两种不同的方式使用GreetingTask
第一路
使用GreetingPluginExtension
配置插件提供的任务hello
,配置块如下:
问候语{
消息='Hi'
迎宾员='Gradle'
}
第二条道路
让用户明确定义/创建任务,并在任务定义中设置所需的值,如下所示:
task helloDirect(类型:GreetigTask){
message=“你好”
greeter=“直接任务”
}
我刚刚发现我可以直接从GreetingTask
-对象使用message
和greeeter
属性打印问候语,或者将任务操作更改为使用project.greeting.message
如何实现更大的灵活性?我希望我的用户可以同时使用这两种功能。看来我已经找到了实现我想要的功能的方法
下面是我改过的部分。问题是,我不知道这是否是gradle方法(tm)来实现我想要的,因为conventionMappings
似乎是使用gradle的旧方法/不推荐的方法。见:和(通过SO:)
有人有更好的建议吗?还是这是最好的方法
conventionMappings
似乎没有很好的文档记录
class GreetingPlugin实现插件{
无效申请(项目){
project.extensions.create(“问候语”,问候语)
def task=project.task('hello',类型:GreetigTask)
//在这里使用约定映射
task.conventionMapping.message={project.greeting.message}
task.conventionMapping.greeter={project.greeting.greeter}
}
}
类GreetigTask扩展了DefaultTask{
def消息
def迎宾员
@任务行动
def greet(){
//在这里随意调用getter和setter。
//conventionMapping属性似乎是在类属性之前计算的
println“${getGreeter()}中的${getMessage()}”
}
}
+1用于使用老式短语“松散耦合”。