使用 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
相关文章:
使用 Gradle 版本目录进行依赖管理 - Android
/ 前言 / 在软件开发中,依赖管理是一个至关重要的方面。合理的依赖版本控制有助于确保项目的稳定性、安全性和可维护性。 Gradle版本目录(Version Catalogs)是 Gradle 构建工具的一个强大功能,它为项目提供了一种集中管理依赖…...
CS_上线三层跨网段机器(完整过程还原)
以前讲过用cs_smb_beacon上线不出网机器,但是真实的网络拓扑肯定不止这么一层的网络! 所以我就来搭建一个复杂一点的网络环境!! 当然了,这三台电脑之间都是不同的网段,(但是同属于一个域环境&a…...
crpto 的AES算法解密为空
1. 需求 对用户密码加密存入数据库,修改密码时取出密码在前端解密(保证密码前后端传输过程中为密文)。 文档地址:CryptoJS - CryptoJS (gitbook.io) 2. 原代码 2.1 加密 var userpass "123456"; var aseKey &quo…...
13.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-如果没有工具就创造工具
内容参考于: 易道云信息技术研究院VIP课 上一个内容 :12.游戏网络通信存在的问题 现在把游戏网络的架构看了一个小小的大概,可以用它的接口发数据接收数据了,如果真正想用它这一套东西,真正核心不在于它的接口而在于…...
配置artifactory的反向代理和域名访问
一、概述 在许多情况下,组织会通过反向代理来提供对 Artifactory 的访问。在某些情况下,例如使用 Artifactory 作为 Docker 注册表,这种设置甚至是强制性的。为了简化反向代理的配置,Artifactory 提供了生成反向代理的功能&#x…...
python爬虫之协程知识点记录
一、协程 概念 协程 又称微线程(纤程),是一种用户态的轻量级线程 子程序 在所有的语言中都是层级调用的,比如A中调用B,B在执行过程中调用C,C执行完返回,B执行完返回,最后是A执行完毕。这是通过栈实现的&a…...
安卓开发1- android stdio环境搭建
安卓开发1-android stdio环境搭建 Jdk环境搭建 1. 准备Jdk,这边已经准备好了jdk1.8.0,该文件直接使用即可 2. 系统变量添加 %JAVA_HOME%\bin JAVA_HOME 3. 系统变量,Path路径添加 4. 添加完成后,输入命令javac / java -version,验证环…...
qt QRadioButton 及QButtonGroup 使用
QRadioButton 放在组合框QGroupBox中,再点击时,即使有多个QRadioButton按钮,同时选中的也就只有一个。 如下图所示, 对于多个QRadioButton,每个按钮都写一个槽函数是不太明智的选择,需要将QRadioButton放在…...
【LeetCode-178】最长重复子串(动归)
目录 LeetCode718.最长重复子串 题目描述 解法1:动态规划 代码实现 题目链接 题目描述 给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。 示例: 输入: A: [1,2,3,2,1] B: [3,2,1,4,7] 输出&…...
1、jQuery介绍、css()、选择器、事件、动画
一、jQuery介绍? 1、什么是jQuery? 是一个JavaScript函数库 2、jQuery特点 写的少,做的多 3、jQuery的安装 直接下载引入 <script src"jquery-1.10.2.min.js"></script>通过cdn引入 <script src"https…...
ArcEngine 调用GP工具时,出现C++ R6034错误
1、Arcengine 调用GP工具时,遇到正试图在 os 加载程序锁内执行托管代码 问题 使用:把VS菜单的 调试->异常->Managed Debuggin Assistants->LoaderLock 的选中状态去掉。不会弹出该错误。 2 编译后运行EXE时,出现C R6034问题 ArcEng…...
windows下基于docker-desktop 安装 mysql 5.7
0.背景 docker-desktop v4.27.1Windows 11 22H2 docker-desktop 需要wsl的支持,一般win11新机子都默认开启了,安装docker-desktop 一路next即可.win10老版本需要自行安装开启wsl.一个小建议是,如果你的win10安装wsl时各种错误无法解决,建议升级到win11大概率解决,本人亲身经历…...
什么是Rust 语言
Rust 是一种专注于性能和内存安全的系统编程语言,其设计目标包括提供:零开销抽象、移动语义、内存安全、线程无数据竞争、类型安全和实时 gc 等功能。Rust 使用 RAII(Resource Acquisition Is Initialization)管理资源,…...
2024年四川媒体新闻发布渠道,媒体邀约资源表
传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 四川有哪些媒体新闻发布渠道,媒体邀约资源表? 2024年四川媒体新闻发布渠道,媒体邀约资源表 四川本地媒体:如四川日报、华西都市报、成都商…...
14:00面试,14:07就出来了,问的问题过于变态了。。。
我从一家小公司转投到另一家公司,期待着新的工作环境和机会。然而,新公司的加班文化让我有些始料未及。虽然薪资相对较高,但长时间的工作和缺乏休息使我身心俱疲。 就在我逐渐适应这种高强度的工作节奏时,公司突然宣布了一则令人…...
利用 Python 抓取数据探索汽车市场趋势
一、引言 随着全球对环境保护意识的增强和技术的进步,新能源汽车作为一种环保、高效的交通工具,正逐渐受到人们的关注和青睐。在这个背景下,对汽车市场的数据进行分析和研究显得尤为重要。 本文将介绍如何利用 Python 编程语言,结…...
新闻网站封锁AI爬虫 AI与新闻媒体博弈继续
随着ChatGPT等新兴AI模型的兴起,它们所依赖的网络爬虫正面临来自全球主流新闻网站的大规模封锁。Richard Fletcher博士团队对十个国家主流新闻网站的统计发现,到2023年底,48%的网站屏蔽了OpenAI的爬虫,24%屏蔽了Google的爬虫。那么…...
Python Web开发记录 Day5:jQuery(JavaScript库)
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 五、jQuery1、jQuery-选择器和菜单案例①快速上…...
前端-Vue3递归组件自定义Tree
需求 PS:写在前面,需求想要一个Tree 形结构展示当前的组织机构,最末层节点可以选择,层级明确。第一选择网上npm官网或者github 找找成型的东西 element-ui Tree 没有组织结构线js-tree 好看,但是适配Vue3 有点费劲&a…...
《TCP/IP详解 卷一》第12章 TCP初步介绍
目录 12.1 引言 12.1.1 ARQ和重传 12.1.2 滑动窗口 12.1.3 变量窗口:流量控制和拥塞控制 12.1.4 设置重传的超时值 12.2 TCP的引入 12.2.1 TCP服务模型 12.2.2 TCP可靠性 12.3 TCP头部和封装 12.4 总结 12.1 引言 关于TCP详细内容,原书有5个章…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...
Unity VR/MR开发-VR开发与传统3D开发的差异
视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...
《信号与系统》第 6 章 信号与系统的时域和频域特性
目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...
