1. 程式人生 > >自己定義Gradle插件之"Hello World"

自己定義Gradle插件之"Hello World"

mod lan 部署 prop def key maven倉庫 創建 type

自己定義Gradle插件之”Hello World”


0.新建一個用於開發這個插件的目錄

1.確定Plugin id

Plugin id一般定義為java 包名。

  • 由字母和數字及“.”和“-”組成
  • 至少有一“.”字符
  • org.gradle 和 com.gradleware 不能使用
  • 不能以“.“開始或結尾
  • 不能含有連續的“.”

本實例的Plugin id為:me.zhangls.custom

2.配置插件

在確定的目錄下建好src/main/resources/META-INF/gradle-plugins/目錄結構,在使用那個plugin id新建一個me.zhangls.custom.properties

文件。裏面配置為
implementation-class=me.zhangls.custom.CustomPlugin

3.寫Plugin類

依據implementation-class那個包名路徑,詳細目錄為src/main/groovy/me/zhangls/custom/CustomPlugin.groovy去建立Plugin實現類

package me.zhangls.custom

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

public class CustomPlugin implements Plugin
<Project> {
void apply(Project project) { project.task(‘hello‘) << { println "Hello World" } } }

解釋說明

  • 這個Project就是後面那個使用插件的那個build.gradle(一個build.gradle文件就是一個project)
  • 為什麽一定要project.task(‘hello‘) <<這麽怪異的寫法,直接用project.task(‘hello‘)不能夠嗎?它們的差別是:前一個在配置階段。後一個是在執行階段。

    實際的含義你懂的,嘻嘻。

4.安裝插件

//apply是Project的一個方法。plugin是一個參數,maven是一個值
//用來部署到本地maven倉庫
apply plugin: ‘maven‘
//用來編譯Groovy代碼(由於我的插件是用groovy寫的)
apply plugin: ‘groovy‘

//dependencies是Project的一個方法。而{}裏面是一個閉包,相當於匿名方法塊。
dependencies {
    //加入Gradle Api依賴
    compile gradleApi()
    //加入本地groovy依賴
    compile localGroovy()
}

//這三個字段都要加,用來表示安裝到本地maven倉庫的位置。

group = ‘me.zhangls‘ //網上有這麽寫的。也有效果,主要是能夠改變項目名稱,可是在文檔中沒有找到相關說明。 //也能夠不寫,那麽會取目錄的名稱,來作為這個值。

archivesBaseName = ‘custom‘ //版本 version = ‘0.1‘

執行gradle install安裝的本地Maven倉庫
建議這個時候,能夠使用Android Studiod導入這個項目,進行興許的開發。

  • 本身as不支持創建gradle plugin功能
  • 建好對應的目錄結構。as能夠創建一個項目

5.使用插件

//配置執行腳本所須要的環境
buildscript {
    //配置倉庫
    repositories {
        mavenLocal()
    }   
    //制定要依賴倉庫裏詳細插件
    dependencies {
        classpath ‘me.zhangls:custom:0.1‘
    } 
}
//應用這個插件
apply plugin: ‘me.zhangls.custom‘

執行gradle hello,就能夠看到Hello World了

6.寫Task類(可選)

  1. 改動CustomPlugin
    project.task(‘hello‘,Type: HelloTask)
  2. 加入一個HelloTask
package me.zhangls.custom;

import org.gradle.api.DefaultTask;
import org.gradle.api.tasks.TaskAction;

public class HelloTask extends DefaultTask {
    //當執行這個任務的時候,執行這種方法。

@TaskAction def action() { println "hello" } }

自己定義Gradle插件之&quot;Hello World&quot;