Gradle学习-4 创建二进制插件工程

二进制插件工程创建有两种方式:

  • 创建独立的工程,调试的时候,需要手动发布成一个二进制插件jar包,给其他工程里面引用,进行功能测试。这种方式是比较麻烦的。
  • 创建buildSrc子工程,它是一个大工程中的子工程,把插件的逻辑写在里面,这样Gradle在构建的时候就会自动将其打包为一个二进制插件jar包。

注:以下示例基于Gradle8.0

1、创建一个buildSrc子工程

  • 在根目录下新建文件夹buildSrc
  • 在buildSrc中新建build.gradle文件

build.gradle

//引用 Groovy 插件,编译插件工程中的代码
plugins{
    id 'groovy'
}

//声明仓库地址
repositories {
    jcenter()
}

//声明依赖包
dependencies {
    implementation gradleApi()
    implementation localGroovy()
}
  • 在buildSrc目录下创建目录src/main/groovy/包名
  • 新建 RouterPlugin.groovy 文件

在这里插入图片描述

RouterPlugin.groovy

package com.leon.router.gradle

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


class RouterPlugin implements Plugin<Project>{

    //实现apply方法,注入插件逻辑
    @Override
    void apply(Project target) {

        println("我是 RouterPlugin 中的 apply() 方法,我来自工程 ${target.name}")
    }
}
  • 在 buildSrc/main目录下新建目录resources/META-INF/gradle-plugins
  • 新建 标识ID.properties 文件

在这里插入图片描述

com.leon.rt.properties

implementation-class=com.leon.router.gradle.RouterPlugin
  • 在 app 目录下的 build.gradle,通过标识ID引入我们的插件

在这里插入图片描述

  • 同步一下,执行命令行"./gradlew clean -q"

在这里插入图片描述

  • 执行完了之后,我们可以看到自动生成了一个 buildSrc.jar、RouterPlugin.class文件

在这里插入图片描述

2、实现参数配置

2.1、定义 Extension

  • 在 RouterPlugin.groovy同目录下创建 RouterExtension.groovy 文件
    在这里插入图片描述

RouterExtension.groovy

package com.leon.router.gradle

//定义 Extension
class RouterExtension {
    String projectName
    String projectPath
}

2.2、注册 Extension

  • 在 RouterPlugin.groovy 中注册 RouterExtension.groovy
package com.leon.router.gradle

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


class RouterPlugin implements Plugin<Project>{

    //实现apply方法,注入插件逻辑
    @Override
    void apply(Project target) {
        println("我是 RouterPlugin 中的 apply() 方法,我来自工程 ${target.name}")

        //注册 Extension
        target.getExtensions().create("leonEx", RouterExtension)
        }
    }
}

2.3、使用 Extension

  • 在 app 目录下的 build.gradle 使用 注册的 leonEx

在这里插入图片描述

2.4、获取 Extension

  • 在 RouterPlugin.groovy 中获取用户设置的 leonEx 参数
package com.leon.router.gradle

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


class RouterPlugin implements Plugin<Project>{

    //实现apply方法,注入插件逻辑
    @Override
    void apply(Project target) {
        println("我是 RouterPlugin 中的 apply() 方法,我来自工程 ${target.name}")

        //注册 Extension
        target.getExtensions().create("leonEx", RouterExtension)


        //获取 Extension
        target.afterEvaluate {
            //当前工程 Gradle 配置阶段已结束
            //到了这一步就可以拿到用户配置的 leonEx 了
            RouterExtension extension = target["leonEx"]

            println("用户配置------项目名称:${extension.projectName}    项目路径: ${extension.projectPath}")
        }
    }
}
  • 执行命令行 “./gradlew clean -q”

在这里插入图片描述

  • 22
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KillerNoBlood

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值