创建Gradle插件记录

一、 创建插件的方法

1. buildSrc 方式组织,创建插件

Gradle项目会优先查找 buildSrc 目录,以 includeBuild 的方式处理目录下项目。
方便本地项目使用。

  • rootProject/buildSrc/src/main/java 目录下,创建插件源文件
  • buildSrc 下创建 配置文件 build.gralde

文档:buildSrc

2. 创建 独立的 插件项目

命令行 或 IDE创建 插件项目,下面以 Gradle命令创建:

# 创建使用Java的插件
gradle init --type java-gradle-plugin

# 或,创建使用Kotlin的插件
gradle init --type kotlin-gradle-plugin

本地使用或调试,引入插件 项目(composing build):

pluginManagement {
    includeBuild '../myplugin'
}

文档:Packaging a plugin

二、声明插件

1. build.gradle 声明插件

新创建项目,默认在 build.gradle 中,gradlePlugin 块 中配置插件ID 和 插件实现类:

gradlePlugin {
    plugins {
        greeting {
            id = 'com.example.myplugin.greeting'
            implementationClass = 'com.example.myplugin.MyPluginPlugin'
        }        
    }
}

2. 资源文件中声明插件

最终通过 资源目录 src/main/resources/META-INF/gradle-plugins
以 插件id 为名的 {plugin-id}.properties 文件,来实现 插件的查找:

implementation-class=com.example.myplugin.MyPluginPlugin

注:第1种方法,最终也是 生成上述 .properties 文件。由gradle插件 java-gradle-plugin 根据 gradlePlugin 块 自动生成。

文档:How does Gradle find the Plugin implementation?

三、 项目中 使用 插件

上面说到 本地 includeBuild 来编译依赖插件:

1. plugins DSL 使用:

在 项目中 build.gradle,使用:

plugins {
    id 'com.example.myplugin.greeting'
}

语法:

plugins {
    id <>

    id <> version <> [apply <>]
}
  1. 第一种是 核心插件 或 已经在buildscript中的插件;
  2. 需要被解析的插件,一般是 第三方插件。

2. 传统的方法:

对于 以前不支持 plugins DSL 的插件,使用 老的方法:

apply plugin: 'com.example.myplugin.greeting'

文档:https://docs.gradle.org/current/userguide/plugins.html#sec:old_plugin_application

Plugin Marker Artifacts

{pluginId}.gradle.plugin 命名发布的Artifact,可以只用 插件ID,来
查找依赖的库。

查找定位逻辑:{pluginId}:{pluginId}.gradle.plugin:{version},这样的方式称为 Plugin Marker Artifcats

文档:

  • Plugin Marker Artifacts
  • Applying plugins with the buildscript block

多项目 插件 统一版本

在 多项目工程中,对于 根项目(rootProject)可以 利用 pluginsapply 属性来统一版本。

在 根项目下的 build.gradle 中,声明:

// 根项目 build.gradle
plugins {
    id('com.example.myplugin.greeting') version '1.0' apply false
}

// 子项目中 build.gradle 配置,无需 配置版本
plugins {
    id('com.example.myplugin.greeting')
}

通常默认配置会 立马 解析(resolve)应用(apply) 插件。
apply 设为 false, 表示 不应用插件到 根项目。目的是 提前解析 插件,保持一样的版本。

旧的插件

使用 buildscript 脚本块,添加到 脚本的classpath中。
引用方法 组+插件ID+版本号:{group}:{pluginId}:{version}

// 参考 Android 项目插件
// 根项目 build.gradle
buildscript {
    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.3'
    }
}

// 项目 build.gradle
apply plugin: 'com.android.application'

文档:Applying external plugins with same version to subprojects

四、插件发布

参考之前文章:MavenCentral库发布记录

文档

  • Using Gradle Plugins
  • Gradle Plugin Development Plugin

你可能感兴趣的:(Android,gradle)