Gradle插件-extensions

简单实例,在工程的build.gradle文件中添加如下代码

class CustomParamsExtensions{
    def happyDes = 'very happy'
    def happyLevel = 3
}

class CustomParamsNestExtensions{
    def dataParams = 'NestParam'
}

project.extensions.create("myParams", CustomParamsExtensions)
project.myParams.extensions.create("nestParams", CustomParamsNestExtensions)

project.afterEvaluate {
    println("App project after evaluate")
    println("the custom extensions happy des is " + project.myParams.happyDes)
    println("the nest extensions dataParams is " + project.myParams.nestParams.dataParams)
}
执行 gradle 后输出

App project after evaluate
the custom extensions happy des is very happy
the nest extensions dataParams is NestParam
以上实例是扩展属性简单的使用,可以使用这种方式在Task中传递参数,以及定义project的一些属性
下面按自己理解简单分析为什么会是这样的方式?

    Project.java

 /**
     * Allows adding DSL extensions to the project. Useful for plugin authors.
     *
     * @return Returned instance allows adding DSL extensions to the project
     */
    ExtensionContainer getExtensions();
从代码上来看,project.extensions返回ExtensionContainer对象, project.extensions.create("Name", ExtensionClass)创建 extension, 按后面的使用来看,创建extension后会将其加入到ExtensionContainer对象中

build.gradle文件中添加下列输出

 println "project.extensions: " + project.extensions
 println "project.myParams: " + project.myParams
 println "project.myParams.extensions: " + project.myParams.extensions
得到的输出结果为

project.extensions: org.gradle.api.internal.plugins.DefaultConvention@7d43928e
project.myParams: CustomParamsExtensions_Decorated@3f32dea4
project.myParams.extensions: org.gradle.api.internal.plugins.DefaultConvention@5d1e3c5eyou
从输出结果来看,project.extensions 和 project.myParams.extensions 的类型为 DefaultConvention


创建时

project.myParams.extensions.create("nestParams", CustomParamsNestExtensions)

DefaultConvention中

    public void add(String name, Object extension) {
        if(extension instanceof Class) {
            this.create(name, (Class)extension, new Object[0]);
        } else {
            this.extensionsStorage.add(name, extension);
        }

    }

    public <T> T create(String name, Class<T> type, Object... constructionArguments) {
        Object instance = this.getInstantiator().newInstance(type, constructionArguments);
        this.add(name, instance);
        return instance;
    }
我们创建的extension会添加到 DefaultConvention的extensionsStorage中

简单实例中extensions的值为:


我们使用的dataParams时的调用方式

project.myParams.nestParams.dataParams

或使用

project.extensions['myParams']['nestParams']['dataParams']


 



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值