Gradle 实现自定义插件

一、以库项目形式创建插件

1.创建项目

如果仅仅是自己项目中来自定义插件,不对外发布,那么可以按照以下的语法来构建目录

1.1  创建一个Module,选择Java Library项目,项目名称必须是 buildSrc,否则插件不被识别

1.2 构建目录 buildSrc/src/main/groovy 本路径android studio会自动识别为 groovy类。 
1.3、在main目录中再构建 resources/META-INF/gradle-plugins,这个目录是groovy项目的资源文件目录。 

 

注意,插件的代码可以是java实现,编程方式比较繁琐,这里我们使用groovy语言。

2、代码实现
新建groovy文件 CustomPluginTest.groovy,代码如下

package com.ncf.plg

import org.gradle.api.Plugin
import org.gradle.api.Project


class  CustomPluginTest  implements  Plugin<Project>{

    @Override
    void apply(Project project) {
        //增加闭包名称,闭包为customPlugin,是 CustomPluginTestExtension类型,因此CustomPluginTestExtension类型中的JaveBean类型的属性可以任意设置
        project.extensions.add("personInfo",PersonInfo)  //personInfo用于build.gradle中添加配置块
        project.task("showPersonInfo") << {
            if(project.personInfo==null) return ;
            println("姓名:" + project.personInfo.name)
            println("年龄:" + project.personInfo.age)
            println("地址:" + project.personInfo.address)
        }
        project.extensions.add("bookInfo",BookInfo);
        project.task("showBookInfo",dependsOn:"showPersonInfo" ) << {  
         //注意,showBookInfo依赖showPersonInfo,dependsOn:"showPersonInfo"
            def book =  project.extensions.findByType(BookInfo);
            println("喜欢的书籍:" + book.name + ", " + book.id + ", " + book.price+'元'+','+book.address+","+book.isbn);
        }

    }
}

PersonInfo类

package com.ncf.plg

class PersonInfo {
    def name = "init";
    def age = "init";
    def address = "init";
}

BookInfo类

package  com.ncf.plg

class BookInfo {
    def name = "《红楼们》";
    def isbn = "SW.SH.CN.I.20181227";
    def address = "北京市海淀区西北旺";
    def price = 25.9f
    def id = 'BS1001029'
}

buildSrc 中的 build.gradle的定义,引入groovy插件,并依赖 gradleApi()、localGroovy()。

apply plugin:'groovy'  #必须

group='com.ncf.plg'
version='3.0.0'

dependencies { 
    implementation gradleApi() #必须
    implementation localGroovy() #必须
    implementation fileTree(dir: 'libs', include: ['*.jar'])
}
repositories {
    mavenCentral() #必须
}


sourceCompatibility = "1.7"
targetCompatibility = "1.7"

配置MyCustomPlugin.properties

implementation-class=com.ncf.plg.CustomPluginTest

 

3、使用插件

在app项目的build.gradle中,我们引用插件

import com.ncf.plg.PersonInfo 


apply plugin: 'MyCustomPlugin'  //properties的名称
personInfo{
    name='张三'
    age=25
    address='北京市海淀区朝阳路'
}

4、调用任务

执行如下命令

gradle showBookInfo 【如果是windows系统,调用gradlew showBookInfo】

执行结果如下

> Configure project :app


> Task :app:showPersonInfo
姓名:张三
年龄:25
地址:北京市海淀区朝阳路

> Task :app:showBookInfo
喜欢的书籍:《红楼们》, BS1001029, 25.9元,北京市海淀区西北旺,SW.SH.CN.I.20181227
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值