插件扩展

原因

为什么需要插件扩展?插件内部执行任务的时候需要依赖外界脚本传入的值进行相对应的构建。

也就是说插件里面的属性需要从外部拿到,外部去设置这些属性。

具体步骤

添加扩展属性

插件通过apply引入,在配置阶段会执行plugin的apply方法,方法内部定义扩展属性使用

第一个参数代表扩展属性的名称,第二个参数的名称代表接收的class类型

//apply方法内部调用以下代码用于添加扩展属性
project.extensions.create("grettings ",A)


//插件内定义bean
class A{
   String name
}

设置扩展属性

可通过gradle在构建阶段执行build.grade时设置属性值:

gradle中有一个和项目相关联的ExtensionContainer对象,可以通过project.extension.属性名称获取,脚本中直接设置。简写为ext,这就是为什么可以直接在脚本中拿到ext里面的属性值

为什么可以使用闭包设置扩展属性呢?

原因是gradle为每个扩展属性都添加了一个配置的闭包,因此可以通过闭包设置扩展属性

使用扩展属性

配置阶段中先引入插件,在插件的apply方法添加了扩展属性后;接着脚本继续往下执行设置了扩展属性,那么接下来就要进入执行阶段了,插件的task在执行阶段如何获取设置的扩展属性呢?

//内部task执行的时候通过以下代码获取

project.extensions.greeting.name

通过task执行的时候获取扩展属性。

gradle自带插件

下图列出了不同插件对应的插件入口类,接下来读者可通过这些入口类找到这些插件配置了哪些扩展属性

image.png