自定义Gradle插件(一)

318 阅读1分钟

新建插件module

File->New module ->Java or Kotlin Library

image.png

build.gradle 配置,添加依赖

compileOnly gradleApi()

image.png

创建类MyClass,实现Plugin接口,泛型传入Project, 方法apply是插件的入口,引入插件之后,执行build,会直接调用此方法。

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

class MyClass : Plugin<Project> {
    override fun apply(project: Project) {
        println("Hello Plugin")
    }
}

创建文件夹:main/resources/META-INF/gradle.plugins,在此文件夹下面创建配置文件 注意配置文件的名字,就是将来使用插件的时候要引入的插件的名字

目录结构如下图

image.png

配置文件custom.plugin.properties内容

//指向插件类的全路径
implementation-class=com.example.customplugin.MyClass

发布插件到本地

在插件Module的目录下创建maven.gradle文件。

maven.gradle配置如下

//  需要引入'maven-publish' 才能使用publishing命令,用于发布插件到本地/maven远程仓库
apply plugin: 'maven-publish'

def versionName = "1.0.1"
publishing {
    // 对应classPath:  classpath("com.custom.plugin:CustomPlugin:1.0.1")
    publications {
        release(MavenPublication) {
            from components.java
            groupId 'com.custom.plugin'
            artifactId 'CustomPlugin'
            version versionName
        }
    }
    repositories {
        // 发布到本地路径
        maven {
            url = "$rootDir/CustomPlugin/localrepo"
        }
    }

}

在插件Module的目录在build.gradle文件中中引入maven.gradle

plugins {
    id 'java-library'
    id 'org.jetbrains.kotlin.jvm'
}

apply from: "maven.gradle"

java {
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatibility = JavaVersion.VERSION_1_7
}
dependencies {
    compileOnly gradleApi()
}

点击Android studio 右侧的gradle,找到CustomPlugin->publishing->- publishAllPublicationsToMavenRepository ,点击发布,发布之后会在CustomPlugin/localrepo目录下生成文件

image.png

使用插件 引入本地maven仓库

maven { url "./CustomPlugin/localrepo" }

添加classPath

buildscript { // gradle 构建脚本 自身,所需的

    dependencies {
        classpath("com.custom.plugin:CustomPlugin:1.0.1")
    }
}

引入插件,注意,引入的插件名字和,当时建立的配置文件名字是一致的

image.png

执行编译,可以看到日志输出

image.png