使用Gradle约定插件实现跨项目构建逻辑共享

使用Gradle约定插件实现跨项目构建逻辑共享

本文详细介绍了如何利用gradle约定插件(convention plugins)来集中管理和共享多个gradle项目间的构建逻辑,特别是针对分布在不同代码仓库中的项目。通过将重复的插件声明、依赖配置等封装成可发布的约定插件,可以显著提高构建脚本的一致性、可维护性,并简化新项目的配置过程。

引言:统一Gradle构建逻辑的挑战

在企业级或大型项目中,我们常常会遇到多个Gradle项目需要应用一套相同的构建配置,例如共同的插件集合(checkstyle、jacoco、maven-publish等)、统一的Java版本、依赖管理策略,甚至是自定义任务。如果这些项目分散在不同的代码仓库中,每次创建新项目或更新公共配置时,都需要手动复制粘贴或修改多个项目的 build.gradle 文件,这不仅效率低下,而且极易引入不一致性和错误,给项目的维护带来巨大挑战。

解决方案:Gradle约定插件

Gradle约定插件(Convention Plugins)正是为解决这类问题而生。它允许我们将一套通用的构建逻辑(包括插件应用、依赖声明、任务配置等)封装成一个独立的Gradle插件。然后,其他项目只需简单地应用这个约定插件,即可继承所有预定义的构建行为。这极大地提高了构建脚本的可重用性、可维护性和一致性。

创建约定插件项目

对于需要跨不同代码仓库共享构建逻辑的场景,最推荐的做法是将约定插件作为一个独立的Gradle项目进行开发和发布。这样,它就可以像任何其他第三方插件一样被消费项目所引用。

以下是一个创建独立约定插件项目的示例:

项目结构:创建一个新的Git仓库,例如命名为 gradle-convention-plugins。其内部结构可能如下:

gradle-convention-plugins/├── build.gradle.kts├── settings.gradle.kts└── src/    └── main/        └── kotlin/            └── com/                └── example/                    └── convention/                        ├── java-conventions.gradle.kts                        └── spring-boot-conventions.gradle.kts

settings.gradle.kts:

rootProject.name = "gradle-convention-plugins"

build.gradle.kts (约定插件项目本身的构建文件):这个文件用于构建和发布我们的约定插件。我们需要应用 kotlin-dsl 插件来编写插件,并 maven-publish 插件来发布它们。

plugins {    // 应用kotlin-dsl插件,以便我们可以用Kotlin编写约定插件    `kotlin-dsl`    // 应用maven-publish插件,用于将约定插件发布到Maven仓库    id("maven-publish")}group = "com.example.convention" // 插件的Maven Group IDversion = "1.0.0"               // 插件的版本repositories {    mavenCentral()}// 配置发布publishing {    publications {        create("mavenJava") {            from(components["kotlinDsl"]) // 发布kotlin-dsl组件        }    }    repositories {        // 配置发布到本地Maven仓库,实际生产中会发布到远程仓库        maven {            name = "local"            url = uri("${layout.buildDirectory.get()}/repo")        }        // 示例:发布到Artifactory或Nexus等远程仓库        // maven {        //     name = "myRemoteRepo"        //     url = uri("https://your-nexus-or-artifactory/repository/maven-releases/")        //     credentials {        //         username = System.getenv("NEXUS_USERNAME")        //         password = System.getenv("NEXUS_PASSWORD")        //     }        // }    }}

定义约定插件 (.gradle.kts 文件):在 src/main/kotlin/com/example/convention/ 目录下创建文件,例如 java-conventions.gradle.kts,用于封装通用的Java项目配置。

// com/example/convention/java-conventions.gradle.ktsplugins {    id("java")    id("maven-publish") // 如果Java项目需要发布,这里可以预设    id("checkstyle")    id("jacoco")    id("pmd")    id("eclipse") // 开发者IDE支持    id("idea")    // 开发者IDE支持}java {    sourceCompatibility = JavaVersion.VERSION_17    targetCompatibility = JavaVersion.VERSION_17}repositories {    mavenCentral()}// 可以在这里配置其他通用任务、依赖版本等tasks.withType().configureEach {    options.encoding = "UTF-8"}checkstyle {    toolVersion = "10.12.7"    // 其他checkstyle配置}jacoco {    toolVersion = "0.8.11"    // 其他jacoco配置}pmd {    toolVersion = "6.55.0"    // 其他pmd配置}

你还可以创建其他约定插件,例如 spring-boot-conventions.gradle.kts,它可以在 java-conventions 的基础上,进一步应用Spring Boot插件和相关配置:

逻辑智能 逻辑智能

InsiderX:打造每个团队都能轻松定制的智能体员工

逻辑智能 83 查看详情 逻辑智能

// com/example/convention/spring-boot-conventions.gradle.ktsplugins {    // 应用我们之前定义的Java约定插件    id("com.example.convention.java-conventions")    // 应用Spring Boot插件    id("org.springframework.boot") version "3.2.0"    id("io.spring.dependency-management") version "1.1.4"}// Spring Boot特有的配置,例如依赖管理dependencyManagement {    imports {        mavenBom(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES)    }}

发布约定插件

完成约定插件的编写后,需要将其发布到Maven仓库,以便其他项目可以引用。

在 gradle-convention-plugins 项目的根目录下执行发布命令:

./gradlew publish

这会将插件发布到 build/repo 目录下(根据 publishing 配置)。在实际生产环境中,你需要配置发布到公司内部的Maven仓库,如Nexus或Artifactory。

在消费项目中应用约定插件

现在,任何独立的Gradle项目都可以通过Maven坐标来引用并应用这些约定插件。

配置插件仓库:在消费项目的 settings.gradle.kts 文件中,声明约定插件所在的Maven仓库。

// settings.gradle.kts (消费项目)pluginManagement {    repositories {        gradlePluginPortal()        // 声明约定插件所在的Maven仓库        maven {            url = uri("file:///path/to/gradle-convention-plugins/build/repo") // 指向本地仓库            // url = uri("https://your-nexus-or-artifactory/repository/maven-releases/") // 指向远程仓库        }    }}rootProject.name = "my-spring-boot-app"

请将 file:///path/to/gradle-convention-plugins/build/repo 替换为实际的本地路径,或者替换为远程Maven仓库的URL。

应用约定插件:在消费项目的 build.gradle.kts 文件中,直接应用自定义的约定插件。

// build.gradle.kts (消费项目)plugins {    // 应用我们发布的Spring Boot约定插件    id("com.example.convention.spring-boot-conventions") version "1.0.0"}// 此时,所有

以上就是使用Gradle约定插件实现跨项目构建逻辑共享的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/288333.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
抖音商城平台客服电话是多少 抖音商城服务热线与人工帮助入口
上一篇 2025年11月4日 19:31:12
崩坏星穹铁道银狼加强了什么-崩铁银狼加强内容一览
下一篇 2025年11月4日 19:31:15

相关推荐

  • mac内核崩溃怎么办_Mac内核崩溃处理方法

    内核崩溃通常由软件冲突、驱动不兼容或硬件故障引起,可按顺序尝试重置NVRAM、安全模式排查、运行Apple诊断、恢复模式修复磁盘或重装系统、检查第三方内核扩展来解决。 如果您的 Mac 在使用过程中突然重启,并显示错误报告或英文代码提示,这很可能是发生了内核崩溃(Kernel Panic)。此类问题…

    2026年9月8日
    000
  • laravel Pint代码风格自动修复工具如何使用_Laravel Pint自动修复代码风格教程

    Laravel Pint是官方提供的代码风格修复工具,基于PHP-CS-Fixer,安装后可通过./vendor/bin/pint运行检查与修复,支持自动格式化、目录指定扫描及自定义配置文件pint.json,推荐集成到Git提交前或CI流程中以保障代码一致性。 Laravel Pint 是 Lar…

    2026年9月8日
    100
  • JMeter脚本中动态填充与编辑数据字段的教程

    本教程详细阐述了如何在jmeter中实现动态数据填充与编辑,以满足自动化测试需求。文章首先澄清jmeter通过发送http请求而非直接操作页面字段的机制,随后指导用户如何捕获http请求骨架,并重点介绍使用csv数据集合配置器(csv data set config)对请求参数进行参数化。通过实例演…

    2026年9月8日
    100
  • 如何在mysql中调试SQL执行计划异常

    答案是通过EXPLAIN分析执行计划,检查索引使用、统计信息和数据分布,结合慢查询日志定位问题。具体为:使用EXPLAIN查看type、key、rows和Extra字段,确认是否全表扫描或未用索引;通过FORCE INDEX测试索引效果;运行ANALYZE TABLE更新统计信息;检查隐式类型转换和…

    2026年9月8日
    100
  • 主板PCIe通道分配对多设备并行运行的影响机制

    主板PCIe通道分配决定多设备性能表现,CPU直连通道优先供给显卡等关键设备,确保高带宽低延迟;芯片组连接的M.2、网卡等外设共享上行链路(如DMI相当于PCIe x4),易形成瓶颈。多NVMe、双显卡或高速网卡并发时,若通道不足将导致拆分降速(如x16降至x8/x8或更低),影响性能。BIOS设置…

    2026年9月8日
    400
  • 正确模拟服务层测试中的模型依赖

    本文深入探讨了在spring boot服务层测试中,如何正确模拟(mock)数据访问对象(dao)或其他服务中的模型参数。通过分析常见错误——即使用`new object()`创建的参数无法匹配到模拟方法——文章详细介绍了如何利用mockito的`mockito.any()`方法来解决这一问题,确保…

    2026年9月8日
    900
  • 如何在mysql中恢复mysqldump备份文件

    恢复MySQL备份需确保文件有效、字符编码一致及权限正确。首先检查备份文件是否含CREATE DATABASE、USE等语句,确认其为标准mysqldump输出。若无创建数据库语句或需指定库名,应手动创建目标数据库:登录MySQL后执行CREATE DATABASE IF NOT EXISTS ta…

    2026年9月8日
    000
  • 漫天星漫画app使用说明

    漫天星漫画app使用指南: 1、打开应用后,可在首页浏览“推荐”“热门”等分类中的精选漫画,也可通过顶部搜索框输入关键词快速查找目标作品。 2、点击“书架”功能,将喜爱的漫画添加收藏,方便随时查看和追踪最新更新章节。 3、进入任意漫画封面图,跳转至详情页面后选择所需章节开始阅读,支持多种阅读模式切换…

    2026年9月8日
    300
  • VS Code远程开发:开发容器规范与特性配置指南

    开发容器通过Docker实现环境隔离,核心文件为devcontainer.json和Dockerfile,配置端口映射、环境变量、扩展安装及依赖缓存,提升团队协作一致性与开发效率。 VS Code 的远程开发功能让开发者能在隔离、一致的环境中高效编码,其中“开发容器(Dev Container)”是…

    2026年9月8日
    100
  • VSCode中怎么运行NPM_VSCode集成终端使用NPM命令和脚本教程

    答案是利用VSCode内置集成终端直接运行NPM命令和脚本。打开终端(Ctrl + `),在项目根目录执行npm install或npm run dev等命令,无需切换界面,支持多终端并行运行服务、测试和Git操作,结合Tasks系统可将脚本定义为任务,通过快捷键一键启动,提升开发效率与体验。 在V…

    2026年9月8日
    100
  • 虚拟伴侣AI如何实现个性化对话 虚拟伴侣AI情感交互的核心技术解析

    虚拟伴侣AI如何实现个性化对话 虚拟伴侣AI情感交互的核心技术解析虚拟伴侣AI如何实现个性化对话 虚拟伴侣AI情感交互的核心技术解析虚拟伴侣AI如何实现个性化对话 虚拟伴侣AI情感交互的核心技术解析虚拟伴侣AI如何实现个性化对话 虚拟伴侣AI情感交互的核心技术解析

    虚拟伴侣AI能记住喜好并做出预期回应,源于多模态输入理解、长期记忆管理、动态人格建模、全双工语音交互与多Agent协同五大技术协同:系统通过文字、语音、图像识别用户情绪与意图;将关键信息向量化存储并关联历史记忆,实现个性化共情回应;基于预设人设与互动深度动态调整性格表现与亲密行为;采用端到端模型支持…

    2026年9月8日 用户投稿
    000
  • 苹果首款2nm芯片!A20/A20 Pro已在路上:iPhone 18系列首发

    据透露,苹果即将推出的a20系列芯片将分为两个型号:基础版a20(内部代号为borneo)以及更高阶的a20 pro(代号borneo ultra)。这两款芯片均基于台积电最新的2nm制程技术打造,标志着苹果首次在智能手机芯片中采用2nm工艺。 回顾过往,苹果在A系列芯片的布局上一贯实行区分策略——…

    2026年9月8日
    100
  • 外包客服有办法把拼多多纠纷率太降下来吗?纠纷率飙升不用愁!专业外包3招实现断崖式下降

    拼多多平台的纠纷率直接关系到店铺权重与流量分配,已成为商家运营中的关键难题。专业客服外包服务通过深度掌握平台规则、部署智能质检系统以及灵活的人力资源配置三大核心手段,能够有效压降纠纷率,提升店铺整体健康度。其中,晓多科技星环智服依托针对拼多多平台的专项优化策略与全流程风控体系,为商家提供高效可靠的外…

    2026年9月8日
    000
  • VS Code扩展打包:资源嵌入与依赖管理指南

    合理配置资源嵌入与依赖管理是VS Code扩展打包的关键。1. 通过package.json的includes字段和.vscodeignore明确包含静态资源如assets/、dist/,确保vsce打包时包含必要文件;2. 使用Webpack等工具构建时,将纯JS依赖(如lodash)打包进bun…

    2026年9月8日
    100
  • laravel Spatie/laravel-backup包的配置和使用_Laravel Spatie备份包配置与使用教程

    Spatie/laravel-backup 可实现 Laravel 项目数据自动备份,支持本地与云存储;配置 backup.php 定义备份源、目标磁盘及排除目录;通过 Artisan 命令手动或定时执行备份与恢复;结合 Laravel 调度任务 daily 备份并清理旧文件;支持监控备份状态与容量…

    2026年9月8日
    000
  • OpenJPA与Oracle:解决4000字节字符串限制警告

    当openjpa在oracle数据库环境中记录“warn: … is being mapped with a handler that may not be able to store values over 4000 bytes/chars long”警告时,这通常意味着实体中某个字符…

    2026年9月8日
    000
  • 如何更新豆包电脑网页版_豆包网页版正版下载方法

    首先通过官方渠道强制刷新网页版可解决豆包功能异常问题,具体操作为使用Chrome或Edge浏览器访问官网并按Ctrl+F5清除缓存;若仍无法加载,建议更换至最新版Edge浏览器以提升兼容性;还可下载官方Windows桌面客户端(约215.9MB),安装后自动同步最新服务;此外,当出现加载失败时,可通…

    2026年9月8日
    000
  • 电脑远程控制的9个实用方案

    Windows自带远程桌面适合办公环境,需配置网络和权限;2. Chrome远程桌面跨平台易用,适合临时协助;3. TeamViewer功能全面,个人免费商用需授权;4. AnyDesk低延迟高性能,适合IT运维;5. 向日葵国产稳定支持远程开机;6. Splashtop企业级流畅支持4K;7. R…

    2026年9月8日
    000
  • 瑞达写作官网正版门户 瑞达写作App官方安装指南点

    瑞达写作官网为https://ipapers.net,提供论文初稿生成、智能大纲、长文记忆、在线改稿、数据图表自动化及学术规范管理等功能,支持一键生成数万字结构化内容,适用于多类型学术写作。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 瑞…

    2026年9月8日
    100
  • Java中类型转换与整数溢出陷阱:正确处理大数运算

    本文深入探讨Java中类型转换与整数溢出这一常见陷阱。当对超出`int`范围的数值进行运算时,如果类型转换操作执行在算术运算之后,可能导致意外的溢出结果。文章通过具体示例,详细解释了Java的运算符优先级和类型提升规则,并提供了确保大数运算正确性的两种有效策略:先进行类型转换,或使用`long`字面…

    2026年9月8日
    000

发表回复

登录后才能评论
关注微信