【原创】作者:huhu
上一篇文章,我们介绍了Gradle自定义插件的几种基本方法。我们向外提供的插件,一般会把一些经常变化的配置放在Gradle内,需要变化时修改Gradle文件,不去修改插件内的文件,这就需要用到Gradle的扩展配置。
扩展模型
我们在自定义插件的 groovy 文件中建立一个扩展模型,代码如下:
package com.example import org.gradle.api.Plugin import org.gradle.api.Project class DemoPlugin implements Plugin<Project> { @Override void apply(Project project) { project.extensions.create('externalConfig', ExternalConfig) project.tasks.create('printExternalConfig') << { println("DemoPlugin message =" + project.externalConfig.message) } } } class ExternalConfig { String message }
ExternalConfig 就是扩展模型,我们给它加了一个message的属性。
并且在DemoPlugin的apply中将ExternalConfig对象模型与关键字'externalConfig'进行了绑定。
同时创建了一个'printExternalConfig'的task,任务是输出对应的log。
扩展机制
由于Project类实现了ExtensionAware接口,是属于可扩展的。
ExtensionAware对象有一个方法getExtensions(),该方法返回一个ExtensionContainer对象,ExtensionContainer对象可以通过create()方法来注册我们的扩展。
这里就是把externalConfig这个闭包和ExternalConfig这个类关联起来,这就是插件的扩展机制。
扩展配置
定义好扩展模型以后如何进行配置呢?只需要在app下的build.gradle:
apply plugin: com.example.DemoPlugin externalConfig { message = 'hello world!' }
然后再调用 gradle printExternalConfig 就可以看到相应的输出了。