Gradle自定义插件之扩展配置

431 阅读1分钟
原文链接: mp.weixin.qq.com

上一篇文章,我们介绍了Gradle自定义插件的几种基本方法。我们向外提供的插件,一般会把一些经常变化的配置放在Gradle内,需要变化时修改Gradle文件,不去修改插件内的文件,这就需要用到Gradle的扩展配置。

扩展模型

我们在自定义插件的 groovy 文件中建立一个扩展模型,代码如下:

package com.exampleimport org.gradle.api.Pluginimport org.gradle.api.Projectclass 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.DemoPluginexternalConfig {    message = 'hello world!'}

然后再调用 gradle printExternalConfig 就可以看到相应的输出了。