美文网首页
gradle入门

gradle入门

作者: 细雨么么 | 来源:发表于2023-04-12 15:08 被阅读0次

参考资料:https://blog.csdn.net/wjcommen/article/details/105295696

buildSrc方式实现

适合在同一个project中使用

1.首先创建new 一个java or kt library。名字使用buildSrc。如果提示buildSrc是保留项目(‘buildSrc’ cannot be used as a project name as it is a reserved name.)只需要在工程根目录中的settings.gragle中将“include ':buildSrc'’”删除,重新编译即可。

buildSrc下的build.gradle内容

plugins {
    id 'java-library'    //默认创建就会有
    id 'java-gradle-plugin' //用来发布插件id使用的
}
repositories { //来提供java的开发API 以及下面的dependencies 可以从根目录的build.gradle中复制过来
    google()
    jcenter()
}
dependencies {//同上
    implementation gradleApi()
    implementation "com.android.tools.build:gradle:4.0.2"
}

java {//系统生成的
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatibility = JavaVersion.VERSION_1_7
}
gradlePlugin{//用来发布plugin的
    plugins{//插件
        xxx{//命名任意
            id ="com.kalerm.test" //这个id就是外面引用时使用的
            //这个必须指向真实的plugin类。参见下图
            implementationClass ="com.kalerm.buildsrc.MyPlugin"
        }

    }
}
必须路径正确指向project开始入口.png

当引用提供的pluginid时,会依赖implementationClass 来找到真实的插件入口。至此,点击build后,可以看到自动生出了下图


image.png

MyPlugin.java

package com.kalerm.buildsrc;

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

public class MyPlugin implements Plugin<Project> {


    @Override
    public void apply(Project target) {
        target.getExtensions().create("user",Person.class);
        target.afterEvaluate(new MyAction());
    }


}

主项目build.gradle

//引入插件的id
apply plugin: 'com.kalerm.test' 
//写入extensions的属性。user与MyPlugin中create的字段相同。
user {
    name "某某某"
    age 99
    ok true
}

Person.java类

需要注意的是,这个类应该是个data(KT中的)类。需要有get/set方法。app主项目build下的配置值,是通过反射get/set来赋值的。特别需要注意的就是isxx之类的属性,如果找不到,多半是命名/驼峰命名问题引起的。

public class Person {
    String name;
    int age;
    boolean ok;


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public boolean isOk() {
        return ok;
    }

    public void setOk(boolean ok) {
        this.ok = ok;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", ok=" + ok +
                '}';
    }
}

MyAction.java

public class MyAction implements Action<Project> {

    @Override
    public void execute(Project project) {
        Person user = (Person) project.getExtensions().findByName("user");
        if (user != null) {
            System.out.println(user.toString());
        }else {
            System.out.println("傻逼了");
        }


    }
}

Action中findByName使用的就是plugin中create的。测试发现,如果你的plugin中create的与app下build中配置的字段不同,会提示编译不过。

执行编译就可以看到输出结果了

相关文章

网友评论

      本文标题:gradle入门

      本文链接:https://www.haomeiwen.com/subject/vcqoddtx.html