美文网首页
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