Gradle版本目录(Version Catalog)

news2024/11/16 7:35:37

Gradle版本目录(Version Catalog)

“版本目录是一份依赖项列表,以依赖坐标表示,用户在构建脚本中声明依赖项时可以从中选择。”

我们可以使用版本目录将所有依赖项声明及其版本号保存在单个位置。这样,我们可以轻松地在模块和项目之间共享依赖项和版本配置列表。

有了IDE插件支持,将依赖项导入到我们的项目中会更容易,因为它提供了基于我们在版本目录中定义的内容的自动完成功能。

最好的方式是创建一个TOML(Tom’s Obvious Minimal Language)文件作为其可移植性。请注意,此TOML文件不是唯一的真相来源,因为我们始终可以在脚本的不同位置硬编码其他依赖项和版本,而IDE不会强制将所有内容保存在版本目录中。

创建版本目录只需要几个步骤。大部分的工作将花在准备TOML文件上,这取决于我们在项目中所拥有的依赖项。

启用版本目录(Version catalog)

gradle 7.4 版本中的版本编目是稳定的,当使用 7.4+ 版本时,此步骤不是必需的。

升级 Gradle
运行./gradlew wrapper --gradle-version=7.6以将项目更新到 7.6 版本。

在旧版 Gradle 上使用 enableFeaturePreview
请注意,在 Gradle 8.0+ 上不再需要 enableFeaturePreview

settings.gradlesettings.gradle.kts 中进行更改:

Kotlin DSL

enableFeaturePreview("VERSION_CATALOGS")
include(":app")

Groovy

enableFeaturePreview("VERSION_CATALOGS")
include ':app'

获取版本目录(Version catalog)

同样的语法,再次将其添加到相同的settings.gradlesettings.gradle.kts中。

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }
}

在这里插入图片描述

libs.versions.toml 文件中声明依赖项

  • 创建gradle/libs.versions.toml文件
  • 值得注意的是,要检查您的 .gitignore 文件是否忽略了 /gradle/ 目录,以便您的版本库会保留lib.versions.toml文件。
  • Android Studio 应该已经捆绑了 Toml 插件;对于 IntelliJ IDEA,您可以双重检查以确保您已经为扩展 IDE 支持安装了该插件。

我的样例libs.versions.toml文件
是一个早期版本,需要继续完善。请注意,文件中包含以下四个部分:

  • versions
  • libraries
  • plugins
  • bundles

同时需要注意的是,如果名称中有“-”,在Gradle构建脚本中引用时必须将其改成“.”。例如,如果我们定义了hilt-android,那么在调用时它将变成libs.hilt.android

[versions]
# Define the dependency versions
minSdk = "26"
targetSdk = "33"
compileSdk = "33"

accompanist = "0.27.0"
androidx-activity-compose = "1.6.1"
androidx-compose-bom = "2022.11.00"
androidx-core-ktx = "1.9.0"
androidx-lifecycle-runtime-compose = "2.6.0-alpha03"
androidx-navigation-compose = "2.5.3"
coil = "2.2.2"
compose-compiler = "1.3.2"
coroutines = "1.6.4"
espresso = "3.5.0"
gradle-plugin = "7.2.2"
androidBuildTools = "7.2.2"
hilt = "2.44.1"
hilt-navigation-compose = "1.0.0"
junit = "4.13.2"
kotest = "5.5.4"
kotlin = "1.7.20"
kotlinx-serialization-json = "1.4.1"
kover = "0.5.0"
ktlint = "11.0.0"
ktlint-plugin = "7.1.0"
ktor = "2.1.3"
leakcanary = "2.10"
mockk = "1.13.2"
room = "2.4.3"
test-rules = "1.5.0"
text-ext = "1.1.4"
timber = "5.0.1"

[libraries]
kotlin-gradlePlugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
android-gradlePlugin = { module = "com.android.tools.build:gradle", version.ref = "androidBuildTools"}

androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "androidx-core-ktx" }
androidx-lifecycle-runtime-compose = { module = "androidx.lifecycle:lifecycle-runtime-compose", version.ref = "androidx-lifecycle-runtime-compose" }
androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity-compose" }
androidx-navigation-compose = { module = "androidx.navigation:navigation-compose", version.ref = "androidx-navigation-compose" }

androidx-room-compiler = { module = "androidx.room:room-compiler", version.ref = "room" } # kapt
androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = "room" }
androidx-room-ktx = { module = "androidx.room:room-ktx", version.ref = "room" }
androidx-room-testing = { module = "androidx.room:room-testing", version.ref = "room" }

junit = { module = "junit:junit", version.ref = "junit" }
androidx-test-junit4 = { module = "androidx.test.ext:junit", version.ref = "text-ext" }
androidx-test-rules = { module = "androidx.test:rules", version.ref = "test-rules" }
androidx-test-espresso-core = { module = "androidx.test.espresso:espresso-core", version.ref = "espresso" }
androidx-test-espresso-idling-resource = { module = "androidx.test.espresso:espresso-idling-resource", version.ref = "espresso" }

androidx-compose-bom = { module = "androidx.compose:compose-bom", version.ref = "androidx-compose-bom" }
androidx-compose-material = { module = "androidx.compose.material:material" }
androidx-compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview" }
androidx-compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling" }
androidx-compose-ui-test-junit4 = { module = "androidx.compose.ui:ui-test-junit4" }
androidx-compose-ui-test-manifest = { module = "androidx.compose.ui:ui-test-manifest" }

timber = { module = "com.jakewharton.timber:timber", version.ref = "timber" }

coil-kt = { module = "io.coil-kt:coil", version.ref = "coil" }
coil-kt-compose = { module = "io.coil-kt:coil-compose", version.ref = "coil" }

kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin" }

kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines" }
kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "coroutines" }
kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinx-serialization-json" }

kotest-runner-junit5 = { module = "io.kotest:kotest-runner-junit5", version.ref = "kotest" }
kotest-assertions-core = { module = "io.kotest:kotest-assertions-core", version.ref = "kotest" }
kotest-property = { module = "io.kotest:kotest-property", version.ref = "kotest" }

ktor-client-android = { module = "io.ktor:ktor-client-android", version.ref = "ktor" }
ktor-client-serialization = { module = "io.ktor:ktor-client-serialization", version.ref = "ktor" }
ktor-client-cio = { module = "io.ktor:ktor-client-cio", version.ref = "ktor" }
ktor-client-content-negotiation = { module = "io.ktor:ktor-client-content-negotiation", version.ref = "ktor" }
ktor-client-logging-jvm = { module = "io.ktor:ktor-client-logging-jvm", version.ref = "ktor" }
ktor-serialization-kotlinx-json = { module = "io.ktor:ktor-serialization-kotlinx-json", version.ref = "ktor" }
ktor-client-mock = { module = "io.ktor:ktor-client-mock", version.ref = "ktor" }

hilt-android = { module = "com.google.dagger:hilt-android", version.ref = "hilt" }
hilt-compiler = { module = "com.google.dagger:hilt-compiler", version.ref = "hilt" }
hilt-navigation-compose = { module = "androidx.hilt:hilt-navigation-compose", version.ref = "hilt-navigation-compose" }
hilt-android-compiler = { module = "com.google.dagger:hilt-android-compiler", version.ref = "hilt" }
hilt-android-testing = { module = "com.google.dagger:hilt-android-testing", version.ref = "hilt" }

mockk = { module = "io.mockk:mockk", version.ref = "mockk" }
mockk-agent-jvm = { module = "io.mockk:mockk-agent-jvm", version.ref = "mockk" }
mockk-android = { module = "io.mockk:mockk-android", version.ref = "mockk" }
accompanist-webview = { module = "com.google.accompanist:accompanist-webview", version.ref = "accompanist" }
accompanist-swiperefresh = { module = "com.google.accompanist:accompanist-swiperefresh", version.ref = "accompanist" }
leakcanary-android = { module = "com.squareup.leakcanary:leakcanary-android", version.ref = "leakcanary" }
ktlint-gradle = { module = "org.jlleitschuh.gradle:ktlint-gradle", version.ref = "ktlint" }

[bundles]
# Define bundles/groups of libraries
coil = ["coil-kt", "coil-kt-compose"]
room = ["androidx-room-ktx", "androidx-room-runtime"]
kotest = ["kotest-runner-junit5", "kotest-assertions-core", "kotest-property"]
ktor = ["ktor-client-android", "ktor-client-serialization", "ktor-client-cio", "ktor-client-content-negotiation", "ktor-client-logging-jvm", "ktor-serialization-kotlinx-json"]
coroutines = ["kotlinx-coroutines-core", "kotlinx-coroutines-android"]

[plugins]
# android-application = { id = "com.android.application", version.ref = "gradle-plugin" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
hilt-android-plugin = { id = "com.google.dagger.hilt.android", version.ref = "hilt" }
kover-plugin = { id = "org.jetbrains.kotlinx.kover", version.ref = "kover" }
kotlin-kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kotlin" }
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
android-library = { id = "com.android.library", version.ref = "gradle-plugin" }
ktlint = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "ktlint-plugin" }

更新依赖

// change from
    implementation 'com.google.dagger:hilt-android:2.43.2'
    kapt 'com.google.dagger:hilt-compiler:2.43.2'

// change to
    implementation libs.hilt.android
    kapt libs.hilt.complier

扩展用法

我们还可以将minSdk和targetSdk移动到版本目录中。

Groovy

https://docs.gradle.org/7.0/userguide/platforms.html#sub:central-declaration-of-dependencies
https://proandroiddev.com/gradle-version-catalogs-for-an-awesome-dependency-management-f2ba700ff894
https://umang91.medium.com/integrating-a-version-catalog-c5c7d45516db

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

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

相关文章

react-useId

// App.tsx const id Math.random();export default function App() {return <div id{id}>Hello</div> }如果应用是CSR&#xff08;客户端渲染&#xff09;&#xff0c;id是稳定的&#xff0c;App组件没有问题。 但如果应用是SSR&#xff08;服务端渲染&#xff…

Spring Boot 属性配置解析

基于Spring Boot 3.1.0 系列文章 Spring Boot 源码阅读初始化环境搭建Spring Boot 框架整体启动流程详解Spring Boot 系统初始化器详解Spring Boot 监听器详解Spring Boot banner详解 属性配置介绍 Spring Boot 3.1.0 支持的属性配置方式与2.x版本没有什么变动&#xff0c;按照…

充电桩计量装置TK4800充电机(桩)现场校验仪检定装置

支持同时开展直流充电机现场校验仪和交流充电桩现场校验仪的检定工作&#xff0c;提高检定效率。 专用检定枪线&#xff1a;配有国标直流充电枪线及国标交流充电枪线&#xff0c;可直接接至交直流充电桩&#xff08;机&#xff09;现场校验仪开展检定工作&#xff0c;无需额外…

JMeter从数据库中获取数据并作为变量使用

目录 前言 1、JMeter连接MySQL数据库 2、线程组下新建一个 JDBC Connection Configuration 配置元件 3、实现数据库的查询-单值引用 4、实现数据库的查询-多值引用 总结&#xff1a; 前言 JMeter如何从数据库中获取数据并作为变量使用&#xff1f;这在我们使用JMeter做接…

企业转型在搭建BI时,需要注意什么

如今&#xff0c;商业智能BI在全世界范围内掀起了一股热潮&#xff0c;形成了一个庞大的市场&#xff0c;在信息化时代&#xff0c;企业需要借助BI来进行更好的成长。 在这种全新的社会、商业BI环境下&#xff0c;各行各业的企业都开始寻求探索新的商业模式&#xff0c;通过转…

Vue基本概念、vue-cli和插值表达式的快速使用

一、vue基本概念 &#xff08;一&#xff09;vue介绍 Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式javascript框架。 1. 渐进式的概念 渐进式&#xff1a;逐渐增强&#xff0c;可以在项目中使用vue的一部分功能&#xff0c;也可以使用vue的全…

网络安全实战植入后门程序

在 VMware 上建立两个虚拟机&#xff1a;win7 和 kali。 Kali&#xff1a;它是 Linux 发行版的操作系统&#xff0c;它拥有超过 300 个渗透测试工具&#xff0c;就不用自己再去找安装包&#xff0c;去安装到我们自己的电脑上了&#xff0c;毕竟自己从网上找到&#xff0c;也不…

GitHub 上“千金难求”!啃完这两本书,Spring在你面前便没有秘密

前言 Spring对Java程序员的重要性相信懂的都懂&#xff0c;夸张点甚至可以说是Spring成就了Java。 为什么说要啃这两本书。前者告诉你怎么用Spring&#xff0c;后者给你简单展示如何用的同时&#xff0c;还告诉你Spring是怎么实现的两者一起&#xff0c;让你知其然并知其所以…

在字节打酱油6年,被淘汰?太真实了...

涛子哥普通本科计算机专业毕业&#xff0c;目前在字节&#xff0c;部门是视频云中台。现在比较稳定&#xff0c;生活也算美满&#xff0c;算是个资深的打酱油高手&#xff0c;在字节也有6、7年左右的划水经验了。 刚好划水的时候在某乎上看到了一个问题&#xff1a;“软件测试会…

2023年Q1天猫电脑品类数据分析(含笔记本、游戏本、平板电脑)

目前&#xff0c;PC市场中正经历新旧产品的换代&#xff0c;在各行业消费复苏的背景下&#xff0c;PC市场的整体市场需求也有回暖的可能。结合鲸参谋平台上第一季度的销售数据&#xff0c;我们一起来看一看电脑市场当前的销售表现如何&#xff01; 笔记本电脑 尽管人们的消费需…

SPI FLASH Fatfs文件系统移植

一.FATFS文件系统简介 FATFS是面向小型嵌入式系统的FAT文件系统。他由C语言编写并且独立与底层I/O介质。支持的内核有&#xff1a;8051,PLC,ARV&#xff0c;ARM等。FATFS支持FAT12,FAT16,FAT32等文件系统格式。 官网链接 二.FATFS源码文件结构 diskio.c:包含底层存储介质的操…

linux搭建hadoop集群

linux搭建hadoop集群 1、创建4台虚拟机2、修改主机名3、配置网络4、配置hosts文件5、分配本地网络给虚拟机6、下载jdk&#xff0c;hadoop压缩包7、用xftp传输到虚拟机8、配置jdk9、配置hadoop10、创建脚本shell脚本&#xff0c;方便同步数据11、配置ssh免密登录12、同步jdk和ha…

希尔贝壳参与构建可信人工智能数据空间,助力大模型行业应用落地

2023年5月30日&#xff0c;由中国信息通信研究院、浙江省经济和信息化厅、杭州市人民政府、中国人工智能产业发展联盟主办的杭州通用人工智能发展论坛在未来科技城圆满落幕。本次会议以“大模型应用机遇和挑战”为主题&#xff0c;众多产学研代表现场参会&#xff0c;共同探讨人…

什么是可以文言文字翻译的呢?

大家有没有在日常生活中需要翻译自己不熟的外语呢&#xff1f;有没有觉得使用翻译软件的时候很轻松呢&#xff1f;你们知道文本翻译这个操作吗&#xff1f;它是一项很实用和创新的技术&#xff0c;可以将一种语言自动翻译转换为另一种语言&#xff0c;当然这些一般都是使用计算…

YOLOv5-7.0添加解耦头

Decoupled Head Decoupled Head是由YOLOX提出的用来替代YOLO Head&#xff0c;可以用来提升目标检测的精度。那么为什么解耦头可以提升检测效果呢&#xff1f; 在阅读YOLOX论文时&#xff0c;找到了两篇引用的论文&#xff0c;并加以阅读。 第一篇文献是Song等人在CVPR2020发表…

根据实体excel导入导出百万数据,可修改表头名称

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 表格导入导出实现效果展示根据实体类导出模板读取表格数据导出数据为excel进阶&#xff1a;修改表格导出的列头 controller示例工具类测试实体实体注解maven依赖 表…

基于SpringBoot+微信小程序的医院预约叫号小程序

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 该项目是基于uniappWe…

加密软件VMProtect教程:使用Windows、Net 、UNIX 秘钥生成器

VMProtect是新一代软件保护实用程序。VMProtect支持德尔菲、Borland C Builder、Visual C/C、Visual Basic&#xff08;本机&#xff09;、Virtual Pascal和XCode编译器。 同时&#xff0c;VMProtect有一个内置的反汇编程序&#xff0c;可以与Windows和Mac OS X可执行文件一起…

VMware虚拟机和主机传输文件

原文链接 虚拟机为Linux系统 使用vm-tools即可。 卸载旧工具&#xff1a; vmware-uninstall-tools.pl安装新工具&#xff1a; apt-get install open-vm-tools-desktop重启系统&#xff1a; reboot此时可以使用CtrlC、CtrlV的方式在主机和Linux虚拟机之间传输文件。 虚拟…

【网络原理】TCP协议如何实现可靠传输(确认应答机制)

&#x1f94a;作者&#xff1a;一只爱打拳的程序猿&#xff0c;Java领域新星创作者&#xff0c;CSDN、阿里云社区优质创作者。 &#x1f93c;专栏收录于&#xff1a;计算机网络原理 本篇主要讲解&#xff1a;TCP协议段格式&#xff0c;TCP的序列号&#xff0c;SYN、ACK标志位&a…