Java Gradle插件编写及发布方式

Java的Gradle插件实现

  1. 在AS (Android Studio)中创建module, 删除除src/main目录和build.gradle以外的所有文件
  2. 在src/main目录下创建java和resources目录
  3. 在java目录下创建包名,并编写Java语言的插件代码
  4. 在resources目录下创建META-INF/gradle-plugins目录
  5. 在META-INF/gradle-plugins目录下创建xxx.properties文件, 其中xxx是要发布的插件名称: com.jeff.plugin.JeffPlugin.properties, 该名字就是引用该插件时使用的名字
  6. xxx.properties文件内容是: implementation-class=com.jeff.plugin.MyPlugin, 指向插件的具体实现
package com.jeff.plugin;

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

import groovy.lang.Closure;

public class MyPlugin implements Plugin<Project> {
    @Override
    public void apply(Project project) {
        // 创建一个新的Task
        project.task("jeff", new Closure(this) {
            // Gradle配置阶段(初始化)调用
            public void doCall() {
                System.out.println("create a new task named jyan");
            }
        }).doLast(new Closure(this) {
            // Gradle执行阶段调用
            public void doCall() {
                System.out.println("doLast");
            }
        });
        System.out.println("hello java plugin");

        // 将新创建的Task(jeff)添加到Build构建任务的最后, 这样可以在build完成之后通过该Task做一些事情
        project.getTasks().findByName("build").doLast(new Closure(this) {
            public void doCall() {
                ((AbstractTask)project.getTasks().findByName("jyan")).execute();
            }
        });
    }
}



插件发布

方法一

apply plugin: 'java'
apply plugin: 'maven'

dependencies {
    implementation gradleApi()
}

repositories {
    jcenter()
    mavenCentral()
}

group = 'com.jeff.plugin'
version = '1.0.0'

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: uri('/home/jeff'))
        }
    }
}

然后在项目根目录执行./gradlew uploadArchives后, 就会将jar包发布在/home/jeff/com/jeff/…目录下.
注意如果com.jeff.plugin.JeffPlugin.properties名字不包含JeffPlugin, 发布的插件在引用时使用项目名称

方法二

apply plugin: 'java'
apply plugin: 'maven-publish'

dependencies {
    implementation gradleApi()
}

repositories {
    jcenter()
    mavenCentral()
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            groupId 'com.jeff.plugin'
            artifactId 'jeffPlugin'
            version '1.0.0'

            from components.java
        }
    }

    repositories {
        maven {
            url uri('/home/jeff/repos')
        }
    }
}

然后在项目的根目录执行./gradlew publish就会发布插件, 发布的插件放在了/home/jeff/repos/com/jeff/…目录下.
引用时直接使用xxx.properties文件的名字即可




插件的引用

在工程目录的build.gradle中添加引用的路径和classpath
repositories {
        // 添加插件库所在的路径
        maven {
            url uri('/home/jeff/repos')
        }
        google()
        jcenter()
}

dependencies {
        // 添加依赖的插件名称及版本
        classpath 'com.jeff.plugin:jeffPlugin:1.0.0'
}
在模块(module)的build.gradle引用插件
// 在模块的build.gradle文件开头引用插件
apply plugin: 'com.jyan.plugin.JYanPlugin'



在引用该插件的模块中将自定义task添加到build过程中

1. 在build.gradle中将Task添加到build任务序列之前
preBuild.dependsOn(jeff)
2. 在build.gradle中将Task添加到build任务序列之后
afterEvaluate {
    def buildTask = project.tasks.findByName('build')
    if (buildTask == null) {
        throw new GradleException("the build task is not found")
    }

    buildTask.doLast {
        jeff.execute()
    }
}

也可以在插件代码中直接添加某个执行任务序列中, 请参考插件代码的最后一段代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值