Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何构造松散耦合的gradle任务属性?_Gradle - Fatal编程技术网

如何构造松散耦合的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

给定以下Gradle任务/插件组合

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用于使用老式短语“松散耦合”。