1. 程式人生 > >自定義Gradle外掛(一)

自定義Gradle外掛(一)

Google已經建議Android開發全部轉向Android Studio開發,Android Studio 是使用gradle編譯、打包的,那麼問題來了,gradle可是有一堆東西...,為了測底瞭解gradle,今天就來學習下如何寫自己的gradle外掛(當然外掛原始碼是使用groovy寫的),先看如下程式碼目錄:


如上圖所示,plugin目錄是外掛原始碼目錄,sample是用來測試外掛的。

1、在目錄plugin/src/main/groovy/com/micky/gradle/下新建外掛類MyCustomPlugin.groovy

package com.micky.gradle;

import org.gradle.api.*;

class MyCustomPlugin implements Plugin<Project> {
	void apply(Project project) {
		project.task('myTask') << {
			println "Hi this is micky's plugin"
		}
	}
}

看看Plugin的原始碼,其實就是一介面

public interface Plugin<T> {
    /**
     * Apply this plugin to the given target object.
     *
     * @param target The target object
     */
    void apply(T target);
}


2、在目錄plugin/src/main/resources/META-INF/gradle-plugins/下建立檔案com.micky.mycustom.properties用來指定外掛實現類

implementation-class=com.micky.gradle.MyCustomPlugin

   特別注意下:檔名“com.micky.mycustom”即是以後我們在使用外掛時的apply plugin 'java' 的java,這裡我也是折騰了半天才得出的結果,坑啊。

3、一般情況下,我們還需要指定外掛專案名稱,在plugin目錄下新建settings.gradle

rootProject.name='gradle-micky'

4、萬事具備,就差編譯了,編譯需要在plugin目錄下新建build.gradle
apply plugin: 'groovy'
apply plugin: 'maven'

dependencies {
	compile gradleApi()
	compile localGroovy()
}

repositories {
	mavenCentral()
}

group='com.micky'
version='1.0.0'

uploadArchives {
	repositories {
		mavenDeployer {
			repository(url: uri('../repo'))
		}
	}
}
在這個腳本里使用groovy外掛編譯groovy原始碼,宣告gradleAPI作為即時編譯依賴,apply plugin: 'maven' 是用來建立一個外掛jar檔案並且儲存在本地maven庫裡,本地maven庫即我們在腳本里建立的"../repo"目錄

執行命令:   gradle uploadArchives


5、以上4個步驟已經編譯外掛並上傳到了本地庫中,接下來就看看怎麼使用外掛,在sample目錄下,新建build.gradle

buildscript {
	repositories {
		maven {
			url uri('../repo')
		}
	}

	dependencies {
		classpath group: 'com.micky',
			name: 'gradle-micky',
			version: '1.0.0'
	}
}

apply plugin: 'com.micky.mycustom'

6、執行命令


myTask即我們在MyCustomPlugin.groovy程式碼中建立的任務,下一編我們將來自定義Gradle 的Task。

原始碼地址:https://github.com/mickyliu945/GradleCustomPlugin