自己定義Gradle插件之"Hello World"
阿新 • • 發佈:2017-07-15
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類(可選)
- 改動
CustomPlugin
類
project.task(‘hello‘,Type: HelloTask)
- 加入一個
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插件之"Hello World"