1. 程式人生 > >自定義 Gradle 外掛學習記錄

自定義 Gradle 外掛學習記錄

參考:https://juejin.im/entry/577bc26e165abd005530ead8


## 建立Model

1.在Android studio 中建立Model,切換到project模式;

2.刪除model下的除build.gradle檔案和src/main目錄以外的所有檔案,修改build.gradle檔案,如下所示:

apply plugin: 'groovy'
apply plugin: 'maven'

dependencies {
    compile gradleApi()
    compile localGroovy()
}

repositories {
    mavenCentral()
}

3.在main目錄下建立groovy目錄;

4.在groovy目錄下新建包名,如com.banzhi.plugin,然後在該包下建立xxx.groovy檔案,實現 org.gradle.api.Plugin 介面,內容如下:

package com.banzhi.myplugin

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


public class PluginDemo implements Plugin<Project> {

    @Override
    void apply(Project project) {
        System.out.println("========================");
        System.out.println("hello gradle plugin!");
        System.out.println("========================");
    }
}

5.在main目錄下建立resources目錄,然後在resources目錄下建立META-INF目錄,在META-INF目錄下建立gradle-plugins目錄,最後在gradle-plugins目錄下建立properties檔案,如:com.banzhi.myplugin.properties,而在其他build.gradle檔案中使用自定義的外掛時候則需寫成:apply plugin: 'com.banzhi.myplugin' properties檔案內容為:

//MyPlugin檔案的全路徑
implementation-class=com.banzhi.myplugin.PluginDemo

最終的目錄結構為:

### 上傳到maven

在model的build.gradle檔案中新增:


group='com.banzhi.myplugin'
version='1.0.0'
uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: uri('D:/repo'))
        }
    }
}

同步下程式碼,然後上傳:

等待執行完成後會在maven倉庫中生成repo檔案:

其中,repo是倉庫名稱,com.banzhi.myplugin是指定的group,myplugin是模組名稱,1.0.0是指定的版本號version;

### 使用

在app的build.gradle中新增:

buildscript {
    repositories {
        maven {
             url uri('D:/repo')
        }
    }
    dependencies {
       classpath 'com.banzhi.myplugin:myplugin:1.0.0'
    }
}


apply plugin: 'com.banzhi.myplugin'

同步程式碼後在Terminal中執行 gradlew testTask,最終執行結果為:

### 另一種方式

另一種方式是針對當前專案的Gradle外掛,不需上傳到maven倉庫,相對來說比較簡單,不需要建立sources檔案;

1.建立的module名稱必須是buildsrc;

2.build.gradle中不需要上傳maven的程式碼,程式碼為:

apply plugin: 'groovy'

dependencies {
    compile gradleApi()
    compile localGroovy()
}

repositories {
    jcenter()
}

最終的檔案結構為:

PluginSecond.groovy的程式碼:

package com.banzhi.myplugin

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

public class PluginDemo implements Plugin<Project> {

    @Override
    void apply(Project project) {
        project.task("testTask") << {
            println("========================")
            println("hello gradle plugin!")
            println("========================")
        }

    }

}

在app的build.gradle中新增 

apply plugin: com.banzhi.buildsrc.PluginSecond

注意這裡的引用不要加引號!rebuild程式碼,執行測試: