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

news2024/11/16 7:46:31

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

  • 创建独立的工程,调试的时候,需要手动发布成一个二进制插件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”

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1883349.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言之线程的学习

线程属于某一个进程 共同点&#xff1a;都能并发 线程共享变量&#xff0c;进程不共享。 多线程任务中&#xff0c;其中某一个线程调用了exit了&#xff0c;其他线程会跟着一起退出 如果是特定的线程就调用pthread_exit 失败返回的是错误号 下面也是

基于JSP技术的校园餐厅管理系统

开头语&#xff1a; 你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果您对校园餐厅管理系统感兴趣或有相关需求&#xff0c;欢迎随时联系我。我的联系方式在文末&#xff0c;期待与您交流&#xff01; 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#x…

Redis 中的通用命令(命令的返回值、复杂度、注意事项及操作演示)

Redis 中的通用命令(高频率操作) 文章目录 Redis 中的通用命令(高频率操作)Redis 的数据类型redis-cli 命令Keys 命令Exists 命令Expire 命令Ttl 命令Type命令 Redis 的数据类型 Redis 支持多种数据类型&#xff0c;整体来说&#xff0c;Redis 是一个键值对结构的&#xff0c;…

深入解析 androidx.databinding.Bindable 注解

在现代 Android 开发中&#xff0c;数据绑定 (Data Binding) 是一个非常重要的技术。它使得我们能够简化 UI 和业务逻辑之间的连接&#xff0c;从而提高代码的可读性和维护性。在数据绑定中&#xff0c;Bindable 注解是一个关键部分&#xff0c;它帮助我们实现双向数据绑定和自…

什么是脏读、幻读、不可重复读

数据库事务 数据库事务是指作为单个逻辑工作单元执行的一系列操作&#xff0c;这些操作要么全部成功执行&#xff0c;要么全部失败回滚&#xff0c;以保持数据库的一致性和完整性。在多线程或多用户同时操作时&#xff0c;难免会出现错乱与冲突&#xff0c;这就需要引入事务的…

零成本、高效率:免费可视化工具的魅力所在

在如今这个数据驱动的时代&#xff0c;免费可视化工具越来越受到人们的欢迎。这些工具不仅降低了数据分析的门槛&#xff0c;还为用户提供了强大的功能和极高的灵活性&#xff0c;使得各行各业的人们都能够轻松地利用数据做出明智的决策。首先&#xff0c;免费可视化工具的零成…

SpringBoot学习06-[SpringBoot与AOP、SpringBoot自定义starter]

SpringBoot自定义starter SpringBoot与AOP SpringBoot与AOP 使用AOP实现用户接口访问日志功能 添加AOP场景启动器 <!--添加AOP场景启动器--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</…

使用Pogo-DroneCAN CANHUB扩展板扩展飞控的CAN口

关键词&#xff1a;Ardupilot&#xff0c;Pixhawk&#xff0c;DroneCAN CANHUB扩展&#xff0c;扩展飞控CAN口 keywords&#xff1a;Ardupilot&#xff0c;Pixhawk&#xff0c;DroneCAN CANHUB Extend 摘要&#xff1a;使用Pogo-DroneCAN CANHUB扩展板扩展飞控CAN口&#xff…

数据挖掘常见算法(分类算法)

K&#xff0d;近邻算法&#xff08;KNN&#xff09; K-近邻分类法的基本思想&#xff1a;通过计算每个训练数据到待分类元组Zu的距离&#xff0c;取和待分类元组距离最近的K个训练数据&#xff0c;K个数据中哪个类别的训练数据占多数&#xff0c;则待分类元组Zu就属于哪个类别…

五分钟了解MQ消息集成

一、MQ消息集成的定义 MQ消息集成是通过消息中间件&#xff08;Message Queue&#xff09;实现的一种数据集成方式。它通过将数据发送到中间件中&#xff0c;再从中间件中接收数据&#xff0c;实现不同系统之间的数据交换。在MQ消息集成中&#xff0c;发送者和接收者之间不需要…

(六)Shader

Shader Shader(着色器)&#xff1a;一种运行在GPU端的类C语言GLSL&#xff0c;用于处理顶点数据以及决定像素片元最终着色。 Shader对三角形数据的处理&#xff0c;分为顶点处理和片元处理&#xff0c;分别称为顶点着色器(Vertex Shader)和片元着色器(Fragment Shader) GLSL …

Ansible 最佳实践:现代 IT 运维的利器

Ansible 最佳实践&#xff1a;现代 IT 运维的利器 Ansible 是一种开源的 IT 自动化工具&#xff0c;通过 SSH 协议实现远程节点和管理节点之间的通信&#xff0c;适用于配置管理、应用程序部署、任务自动化等多个场景。本文将介绍 Ansible 的基本架构、主要功能以及最佳实践&a…

最简单的Qt连接MYSQL的方法

1.报错原因 Qt在某个版本后不在提供编译好的mysql驱动&#xff0c;只在src中提供了驱动源码&#xff0c;使用需要自行编译链接&#xff0c;报错信息如下&#xff1a; QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL Q…

BUT000增强字段BAPI结构激活出错(BUPA_CENTRAL_CI_CHANGE)

导语&#xff1a;BP主数据增强字段&#xff0c;需要使用BAPI&#xff1a;BUPA_CENTRAL_CI_CHANGE进行值写入&#xff0c;但是在SAP 2023以后的版本&#xff0c;激活会出错&#xff0c;原因是因为SAP的一个结构同时包含了BUS00_EEW以及BUS00_EEWX两个结构&#xff0c;导致结构字…

A股低开高走,近3000点,行情要启动了吗?

A股低开高走&#xff0c;近3000点&#xff0c;行情要启动了吗&#xff1f; 今天的A股&#xff0c;让人瞪目结舌了&#xff0c;你们知道是为什么吗&#xff1f;盘面上出现2个重要信号&#xff0c;一起来看看&#xff1a; 1、今天两市低开高走&#xff0c;银行板块护盘指数&…

教你如何在群晖上部署m3u8视频下载工具,支持浏览器一键添加下载任务

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 快速开始📝 群晖部署📝 部署浏览器一键添加任务🎈 常见问题 🎈⚓️ 相关链接 ⚓️📖 介绍 📖 在当今数字化时代,视频内容的下载和管理变得越来越重要。尤其是对于那些使用群晖NAS设备的用户,一…

Android Studio 解决AAPT: error: file failed to compile

1.找到项目下的build.gradle 2.在android语块中添加下面代码 aaptOptions.cruncherEnabled false aaptOptions.useNewCruncher false 12

scratch宇航员太空漫游 2024年6月中国电子学会图形化编程 少儿编程 scratch编程等级考试一级真题和答案解析

目录 scratch宇航员太空漫游 一、题目要求 1、准备工作 2、功能实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、 推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程…

如何使用AI学习一门编程语言?

无论你是软件开发新手还是拥有几十年的丰富经验&#xff0c;总是需要学习新知识。TIOBE Index追踪50种最受欢迎的编程语言&#xff0c;许多生态系统为职业发展和横向转型提供了机会。鉴于现有技术具有的广度&#xff0c;抽空学习一项新技能并有效运用技能可能困难重重。 最近我…

四川财谷通抖音小店,诚信经营

在当下这个数字化、网络化的时代&#xff0c;电商平台的兴起极大地改变了人们的购物习惯。抖音小店作为新兴电商模式的代表&#xff0c;凭借其短视频、直播等互动性强、传播速度快的特点&#xff0c;吸引了大量消费者和商家的目光。四川财谷通抖音小店&#xff0c;正是其中一颗…