使用 Gradle 版本目录进行依赖管理 - Android

  /  前言  /

在软件开发中,依赖管理是一个至关重要的方面。合理的依赖版本控制有助于确保项目的稳定性、安全性和可维护性。

Gradle版本目录(Version Catalogs)是 Gradle 构建工具的一个强大功能,它为项目提供了一种集中管理依赖版本的方式,使得团队协作更为高效。

/  什么是版本目录?/

Gradle版本目录是 Gradle 6.8 版本引入的一项新功能,它允许开发者将项目中使用的所有第三方依赖的版本信息集中管理在一个地方。

通过定义一个版本目录,你可以在一个文件中指定所有依赖的版本号,而不必在每个模块或构建文件中重复声明。

/  示例  /

1. 新建一个空项目

首先创建一个空白的 Android 项目,默认情况下我们的 Gradle 文件如下:

图片

可以看到所有的依赖都是以字符串形式呈现,到后期项目越来越庞大时,对于开发者而言维护工作会大大增加。当然Gradle版本目录我相信在后期的 Android Studio 中以默认的形式存在。

不难看出,Android中的依赖项基本都是由相同部分组成,什么意思呢?即冒号(:)之前的就是所谓的依赖组,你可以理解为一个依赖组捆绑了多个相关的依赖项,冒号之后的就是它的组成部分。例如:

  • 依赖组:androidx.compose.ui

  • 间隔:冒号(:)

  • 具体依赖:ui-graphics

2. 创建版本目录

在 gradle 文件中添加一个名为 libs.versions.toml 文件,添加完成后,点击 Sync 同步一下。

图片

文件包含三个部分:版本块、依赖库块、插件块。

 

[versions]

[libraries]

[plugins]

3. 开始迁移依赖

回到 build.gradle 文件中,你会发现依赖项弹出了黄色高亮提示。

图片

根据IDE提示可以智能的识别到版本目录的存在,然后一键替换,替换后会报错,我们需要同步一下即可。

图片

来到版本目录,IDE自动地把依赖放到了对应的位置,如下图:

图片

剩余的依赖同上依次迁移过去到版本目录即可,需要注意的是,像类似 compose-bom 已经统一了版本号的物料清单,被包含的依赖不再需要定义版本号并且不需要使用 module,而是使用 group。name 代表了具体的名字。

图片

图片

3. 迁移插件

接下来需要处理的另一处是我们的项目的插件部分,当然这部分没有提示,需要我们手动迁移过去。

图片

迁移前

图片

迁移后

在同步完成之后,如果 libs 出现以下报错问题可以参考博客解决:

图片

博客:

https://github.com/gradle/gradle/issues/22797

源码:

https://github.com/AAnthonyyyy/VersionCatalogsGuide

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用Python对数据进行rsa加密

#!/usr/bin/python3 import base64 import json import jsonpath import requests from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5 from base64 import b64decode, b64encodedef get_public_key():"""备注&#…

网络工程师笔记3

IP地址类型 A类 255.0.0.0B类 255.255.0.0C类 255.255.255.0D类 E类 子网掩码:从左到右连续的确定网络位 2-4-8-16-32-64-128-256 128 : 1000 0000 64 : 0100 0000 32 : 0010 0000 16 : 0001 0000 8 &am…

vue3 开发记录

1.引入nprogress插件,显示未声明文件 无法找到模块“nprogress”的声明文件。 解决方法: vite-env.d.ts // 解决引入模块的报错提示 declare module "nprogress";2.在 .evn 文件中创建了自定义环境变量 VITE_APP_BASE_URL 但在项目中使用时出…

【c语言】探索联合和枚举---解锁更多选择

前言 上一篇 讲解的是结构体相关知识,接着本篇主要讲解的是 联合和枚举 相关知识 结构体、联合体和枚举都属于 自定义类型。 那么接下来就跟上我的节奏,准备发车~ 欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误&#xf…

如何在群晖NAS中开启FTP服务并实现公网环境访问内网服务

文章目录 1. 群晖安装Cpolar2. 创建FTP公网地址3. 开启群晖FTP服务4. 群晖FTP远程连接5. 固定FTP公网地址6. 固定FTP地址连接 本文主要介绍如何在群晖NAS中开启FTP服务并结合cpolar内网穿透工具,实现使用固定公网地址远程访问群晖FTP服务实现文件上传下载。 Cpolar内…

同局域网共享虚拟机(VMware)

一、前言 首先我们先来了解下 VMware 的三种网络模式桥接模式、NAT模式、仅主机模式,网络类型介绍详情可以参考下我之前的文档 Linux系统虚拟机安装(上)第三章 - 第9步指定网络类型。了解三种网络模式的原理之后,再来剖析下需求&…

Python进阶学习:axis=0和axis=1的区别和用法

Python进阶学习:axis0和axis1的区别和用法 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订阅和…

Python is not set from command line or npm configuration 报错解决

问题 在 npm install 的过程中提示 Python is not set from command line or npm configuration 的报错,相信不少朋友都遇到过,出现这个问题的原因是缺少 python 环境所导致的。 解决方法 1、安装 python 官网:https://www.python.org/dow…

Halcon 求孔洞的大小和数量

文章目录 适用场景汽车按钮案例 适用场景 在工业中可以利用孔洞的多少和孔洞的大小来分析出产品的缺陷问题,例如一个产品有8个孔洞,孔洞多和少都会被识别为不合格产品,或者求出孔洞的面积,如果孔洞的大小超出一定的范围将视为不合…

第十四课 PCB保姆级规则设置(三)

1.SMT:贴片规则,默认设置 2.Mask阻焊:绿油阻焊外扩(4mil),助焊0mil 3.器件之间的距离 1)有丝印的话,根据空间和整体调节,丝印不冲突就可以 2)没有丝印&…

C++惯用法之空基类优化

相关系列文章 C惯用法之Pimpl C惯用法之CRTP(奇异递归模板模式) C之std::tuple(二) : 揭秘底层实现原理 目录 1.空类 2.空基类优化 3.内存布局原则 4.实例分析 5.总结 1.空类 C 中每个对象的实例都可以通过取地址运算符获取其在内存布局中的开始位置,因此每个类…

【亚马逊云科技】通过Amazon CloudFront(CDN)快速访问资源

文章目录 前言一、应用场景二、【亚马逊云科技】CloudFront(CDN)的优势三、入门使用总结 前言 前面有篇文章我们介绍了亚马逊云科技的云存储服务。云存储服务主要用于托管资源,而本篇文章要介绍的CDN则是一种对托管资源的快速访问服务&#…

18个惊艳的可视化大屏(第九辑):智慧旅游和智慧景区

本次带来18个页面是智慧旅游和智慧景区的作品分享,希望大家能从作品中寻找到灵感 ,创造更新的应用。 数字孪生技术可以为智慧旅游/智慧景区提供数字化模型和数据支持,帮助景区管理者更好地了解景区的运营情况和游客需求,从而提供更…

为什么企业需要使用云电子邮箱?

作为一家机构的负责人,您比大多数人都清楚,您的工作日不会在下午5点就结束。很可能,当您的员工已经打卡下班回家很久之后,您还在以这样或那样的方式继续工作。作为一名企业主,埋头苦干对您来说并不是什么新鲜事&#x…

分巧克力(蓝桥杯)

文章目录 分巧克力题目描述二分算法 分巧克力 题目描述 儿童节那天有 K位小朋友到小明家做客。 小明拿出了珍藏的巧克力招待小朋友们。 小明一共有 N块巧克力,其中第 i 块是 HiWi 的方格组成的长方形。 为了公平起见,小明需要从这 N 块巧克力中切出 K …

sawForceDimensionSDK安装,sigma7+ros

force dimension的sdk中没有关于ros,借助开源的sawForceDimensionSDK实现对于数据的封装和可视化,方便后续使用 链接: GitHub - jhu-saw/sawForceDimensionSDK 具体步骤: 安装qt和ros,官网下载Force Dimension SDK …

微信小程序 uniapp+vue实习助学岗位系统springboot/php/python/nodejs

(一)研究目标: 对于本微信小程序实习系统的设计来讲,主要是采用了java语言和mysql数据库来完成对系统的设计,根据某高校的实习系统,提出解决问题的一个可行性方法,可以在手机端就能完成我们的工…

对话式人工智能:改变电子学习的格局

革命性教育体验:对话式AI导师如何改变学习方式 对话式人工智能和电子学习的融合不仅仅是技术进步,更是技术进步。 这是教育范式的一场革命。 这种整合正在重塑我们的学习方式,打破传统障碍,创造更具互动性、个性化且易于访问的学习…

科普SCADA系统

什么是SCADA系统? 在20世纪中期,工业设施依靠人员对设备进行物理控制和监控。然而,随着行业规模的扩大,设备控制的创新出现了。20世纪70年代初,监控与数据采集(SCADA)系统被发明。该系统允许自…

探索IP地址定位工具:解读IP数据云的功能与优势

在当今数字化时代,IP地址定位工具成为了许多领域中不可或缺的技术支持,为网络安全、地理定位服务和个性化推荐等提供了重要数据支持。其中,IP数据云作为一种领先的IP地址定位工具,具有一系列功能和优势,本文将对其进行…