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.plgimport org.gradle.api.Pluginimport org.gradle.api.Projectclass  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.plgclass PersonInfo {
    def name = "init";
    def age = "init";
    def address = "init";}

BookInfo類

package  com.ncf.plgclass 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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章