1. 程式人生 > >Gradle 實現自定義外掛

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