Gradle:使用buildSrc方式實現自定義Gradle插件

本文僅記錄buildSrc項目方式實現的自定義Gradle插件

1.首先新建插件module選擇java library(Module名稱必須是:buildSrc)

2.修改插件對應build.gradle文件,添加相應gradle依賴

apply plugin: 'java-library'
repositories {
    google()
    jcenter()
}
dependencies {
    //添加gradle版本
    implementation 'com.android.tools.build:gradle:3.3.2'
    //添加gradle對應api
    implementation gradleApi()
}

3.編寫插件對應java代碼,實現Plugin<>接口

package com.wj.plugin;
import com.android.build.gradle.AppPlugin;
import org.gradle.api.Action;
import org.gradle.api.GradleException;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.Task;
public class MyPlugin implements Plugin<Project> {
	@Override public void apply(Project project) {
		if (!project.getPlugins().hasPlugin(AppPlugin.class)) {
			throw new GradleException("無法在非android application插件中使用gradle插件");
		}
		//task測試,可以通過命令執行:gradlew testTask,測試改task執行情況
		project.task("testTask").doFirst(new Action<Task>() {
			@Override public void execute(Task task) {
				System.out.println("task Test....");
			}
		});
		//"user"使用插件時相應的配置對象
		project.getExtensions().create("user",Person.class);

		project.afterEvaluate(new Action<Project>() {
			@Override public void execute(Project project) {
				//獲取使用過程中的相應配置參數
				Person user= (Person) project.getExtensions().findByName("user");
				if (user!=null){
					System.out.println("findByName--->"+user.toString());
				}else {
					System.out.println("findByName--->NULL");
				}
				Person person=project.getExtensions().findByType(Person.class);
				if (person!=null){
					System.out.println("findByType--->"+person.toString());
				}else {
					System.out.println("findByType--->NULL");
				}
			}
		});
	}
}

4.使用自定義gradle插件,在主Module下引入自定義插件

apply plugin: 'com.android.application'
//1.插件完整類名引入
//apply plugin: com.wj.plugin.MyPlugin

//2.配置屬性文件名引入
//“resources/META-INF/gradle-plugins/buildSrcPlugin.properties”
//文件內容:implementation-class=com.wj.plugin.MyPlugin
apply plugin: 'buildSrcPlugin'
user{
    name "Json"
    age 30
    man true
}
android {
    compileSdkVersion 28
    buildToolsVersion "29.0.2"
    ...
}

5.測試結果

6.目錄結構

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章