美文网首页
自定义Gradle Plugin

自定义Gradle Plugin

作者: 李晓俊 | 来源:发表于2017-12-01 14:38 被阅读40次

自定义Gradle插件可以将常用的任务封装起来,简化使用。

环境准备

  • IDEA 一份 + JDK
  • Gradle Distribution 一份,尽量4.0+

1. 首先使用IDEA创建Java&Gradle工程

  • 得到正确的文件目录结构,如src/main/java
  • 得到一份初始的build.gradle文件

2. 使用相关帮助插件

编写插件需要一个帮助插件和一个发布插件,还会用到Gradle相关的Api,我们将其添加到gradle文件中:

buildscript {
    repositories {
        maven {
            // plugin-publish-plugin插件的地址
            url("https://plugins.gradle.org/m2/")
        }
        mavenCentral()
    }
    dependencies {
        classpath "com.gradle.publish:plugin-publish-plugin:0.9.9"
    }
}
// 发布插件,待会儿发布我们的插件时用到
apply plugin: "com.gradle.plugin-publish"
// 帮助插件,用来配置我们自己的插件信息
apply plugin: 'java-gradle-plugin'

repositories {
    mavenCentral()
}
dependencies {
    // 依赖Gradle相关Api
    compile gradleApi()
}
group 'com.lxj.plugindemo'
version '0.0.1'

3. 编写插件内容

  1. src/main/java目录下创建包com.lxj.plugindemo,编写一个自定义Task:
public class Hello extends DefaultTask{
    private String name;
    private String age;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    // when you run task, this method will be executed.
    @TaskAction
    void sayHello() {
        System.out.printf("%s, %s!\n", getName(), getAge());
    }
}
  1. 将Task注册到当前Project中,需要编写一个类继承Plugin类:
public class HelloPlugin implements Plugin<Project> {
    @Override
    public void apply(Project project) {
        //you add a task named 'hello'.
        project.getTasks().create("hello", Hello.class, (task) -> {
            //you can set something to task.
            task.setName("Hello");
            task.setAge("World");
        });
    }
}

当然我们可以借助官方已有的很多task,比如copy文件来完成我们的功能。假设插件已经写完,那么如何发布呢?

4. 配置Auth Key,如果要将插件发布到官方仓库,需要先在Gradle网站[https://login.gradle.org/user/login]注册一个账户,然后获取自己的Api Key,将这2行api key放到c:/users/xxx/.gradle/gradle.properties文件zhong

5. 发布插件到官方PluginPortal[https://plugins.gradle.org/]

我们已经使用了发布插件的库,只需要配置一些东西,在gradle末尾添加:

gradlePlugin {
    plugins {
        helloPlugin {
            id = 'com.lxj.plugindemo'
            implementationClass = "com.lxj.plugindemo.HelloPlugin"
        }
    }
}

pluginBundle {
    website = 'https://www.github.com/li-xiaojun'
    vcsUrl = 'https://www.github.com/li-xiaojun'

    plugins{
        helloPlugin {
            id = 'com.lxj.plugindemo'
            displayName = 'HelloPlugin'
            description = 'Just for learn!'
            tags = ['aaa', 'bbb', 'ccc']
            version = project.version
        }
    }
}

注意事项

  1. 插件代码中不能有中文,否则会编译出错。

相关文章

网友评论

      本文标题:自定义Gradle Plugin

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