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.目录结构

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