Gradle自定義外掛實現自定義Task
最近在研究自定義外掛,寫個最簡單的Demo玩玩,如何簡單的實現自定義Plugin,當然這裡指的是自定義的。
首先肯定是要參考官網的文件
https://guides.gradle.org/writing-gradle-plugins/
官方文件的內容挺多了,最近還是沒有太大時間詳細去看,所以這裡只拿這一段來操作,自定義plugin
1. 建立自定義Plugin的Module 並 配置gradle
新建一個module並且命名為buildsrc,可以看官網文件的事例
在module的gradle中新增
repositories { mavenCentral() }
為了能夠寫自定義任務,我們需要新增依賴,可以參考官方文件
dependencies { compile gradleApi() compile localGroovy() }
這樣就算是配置好了
2. 自定義任務
在java中建立一個類來自定義任務,該類需要繼承DefaultTask
public class MyTest extends DefaultTask { public String str; @TaskAction public void say(){ System.out.print(str); } }
用@TaskAction註釋來標明執行任務時所執行的方法
3. 自定義Plugin
在main資料夾下建立groovy目錄(該目錄下可以寫groovy程式碼,也可以寫java程式碼)
建立自定義Plugin,我這命名為TestPlugin
public class TestPlugin implements Plugin<Project> { @Override public void apply(Project project) { project.getTasks().create("hello", MyTest.class, new Action<MyTest>() { @Override public void execute(MyTest myTest) { myTest.str = "aaaaaaaaaaaaaaaa"; myTest.say(); myTest.str = "hello"; } }); } }
在此建立了一個名為hello的任務,然後對映到我們自定義的任務的類MyTest。
4. 引用外掛
我這裡因為沒有其它模組,所以直接在根目錄中引用外掛
在原本的gradle檔案中加入apply plugin: com.test.plugin.TestPlugin
apply plugin: com.test.plugin.TestPlugin buildscript { repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.2.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { google() jcenter() } } task clean(type: Delete) { delete rootProject.buildDir }
5.執行結果
我們直接在命令列中執行hello命令檢視結果,輸入gradlew hello(gradlew是我這臺機的,有些是gradle)
可以看到上面我們寫的execute回撥會在Configure project階段執行的,而str = "hello"也是在這個階段設定的,那麼我們像其它外掛一樣寫個閉包,看看效果,在gradle中加入
hello{ str = "what" }
加入閉包設定str 為 what,看看列印的結果
看到最後的結果會是在閉包中設定的內容