一、Build Script 自定义插件

1、基本介绍
  1. 插件代码直接写在模块级 build.gradle 文件中

  2. 逻辑非常简单,且仅在该模块使用

2、演示
(1)具体实现
  • 在模块级 build.gradle 文件中定义插件
class SimpleBuildScriptPlugin implements Plugin<Project> {

    @Override
    void apply(Project target) {
        println "这是 SimpleBuildScriptPlugin"

        // 创建任务
        target.tasks.create("printMessage") {
            doLast {
                println "这是 SimpleBuildScriptPlugin 中的任务 printMessage"
            }
        }
        target.tasks.create("printHello") {
            doLast {
                println "这是 SimpleBuildScriptPlugin 中的任务 printHello"
            }
        }
    }
}
(2)使用插件
  • 在模块级 build.gradle 文件中使用插件
apply plugin: SimpleBuildScriptPlugin
(3)测试
  1. 构建项目时,输出结果如下
# 输出结果

> Configure project :gradleplugin
这是 SimpleBuildScriptPlugin
  1. 在项目根目录下如下指令
.\gradlew printMessage
# 输出结果

> Configure project :gradleplugin
这是 SimpleBuildScriptPlugin

> Task :gradleplugin:printMessage
这是 SimpleBuildScriptPlugin 中的任务 printMessage

二、buildSrc 自定义插件

1、基本介绍
  1. 在项目根目录下创建 buildSrc 模块,代码会自动编译并供所有模块使用

  2. 逻辑较复杂,但在单一工程内部多个模块复用

2、演示
(1)具体实现
  1. 创建 buildSrc 模块

  2. settings.gradle 文件中删除如下内容

include ':buildSrc'
  1. buildSrc/src/main 目录下创建 groovy 目录

  2. buildSrc/src/main/groovy 目录下创建并编辑 com.my.buildsrc.SimpleBuildSrcPlugin.groovy

package com.my.buildsrc

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

class SimpleBuildSrcPlugin implements Plugin<Project> {

    @Override
    void apply(Project target) {
        println "这是 SimpleBuildSrcPlugin"

        // 添加扩展
        target.extensions.create("buildSrcConfig", BuildSrcExtension)

        // 创建任务
        target.tasks.create("buildSrcTask") {
            doLast {
                def config = target.buildSrcConfig
                println "Message: ${config.message ?: 'default message'}"
            }
        }
    }
}

class BuildSrcExtension {
    String message
}
  1. buildSrc/src/main 目录下创建 resources 目录,在 buildSrc/src/main/resources 目录下创建 META-INF/gradle-plugins 目录

  2. buildSrc/src/main/resources/META-INF/gradle-plugins 目录下创建并编辑 com.my.buildsrc.properties

implementation-class=com.my.buildsrc.SimpleBuildSrcPlugin
(2)使用插件
  • 在其他模块的模块级 build.gradle 文件中使用插件
apply plugin: 'com.my.buildsrc'

buildSrcConfig {
    message = "Hello World"
}
(3)测试
  1. 构建项目时,输出结果如下
# 输出结果

> Configure project :gradleplugin
这是 SimpleBuildSrcPlugin
  1. 在项目根目录下如下指令
.\gradlew buildSrcTask
# 输出结果

> Configure project :gradleplugin
这是 SimpleBuildSrcPlugin

> Task :gradleplugin:buildSrcTask
Message: Hello World

三、独立项目自定义插件

1、基本介绍
  1. 创建一个完全独立的 Java/Kotlin Library 模块,打包成 JAR 上传至本地或远程仓库

  2. 可以在多个不同工程之间复用,或准备开源

2、演示
(1)具体实现
  1. 创建一个名为 MyPluginProject 的项目

  2. 在项目中,删除 app 模块,创建一个名为 PluginModule 的模块

  3. PluginModule/src/main/java 目录下创建并编辑 com.my.pluginmodule.SimplePlugin.java

public class SimplePlugin implements Plugin<Project> {

    @Override
    public void apply(Project target) {
        System.out.println("这是 SimplePlugin");

        // 创建任务
        Task task = target.getTasks().create("simpleTask");
        task.doLast(t -> {
            System.out.println("这是 simpleTask 任务");
        });
    }
}
  1. PluginModule/src/main/resources/META-INF/gradle-plugins 目录下创建并编辑 com.my.pluginmodule.properties
implementation-class=com.my.pluginmodule.SimplePlugin
  1. 修改 PluginModule 的 build.gradle 文件
plugins {
    id 'java-library'
    id 'maven-publish'
}

dependencies {
    implementation gradleApi()
}

java {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
}

// 发布配置
publishing {
    publications {
        plugin(MavenPublication) {
            from components.java
            groupId = 'com.my'
            artifactId = 'pluginmodule'
            version = '1.0.0'
        }
    }
    repositories {
        mavenLocal()
    }
}
  1. 在项目根目录下如下指令,发布插件
./gradlew :pluginmodule:publishToMavenLocal
(2)使用插件
  1. 在项目级 build.gradle 文件中,添加如下内容
buildscript {
    repositories {
        mavenLocal()
    }
    dependencies {
        classpath 'com.my:pluginmodule:1.0.0'
    }
}
  1. 在模块级 build.gradle 文件中,添加如下内容
apply plugin: 'com.my.pluginmodule'
(3)测试
  1. 构建项目时,输出结果如下
# 输出结果

> Configure project :gradleplugin
这是 SimplePlugin
  1. 在项目根目录下如下指令
.\gradlew simpleTask
# 输出结果

> Configure project :gradleplugin
这是 SimplePlugin

> Task :gradleplugin:simpleTask
这是 simpleTask 任务
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐