Gradle配置指南:深入解析settings.gradle.kts(Kotlin DSL版)
文章目录
- Gradle配置指南:深入解析settings.gradle.kts(Kotlin DSL版)
- settings.gradle.kts
- 基础配置选项
- 单项目配置
- 多项目配置
- 高级配置选项
- 插件管理(Plugin Management)
- 基础配置模板
- 案例:Android项目标准配置
- 实践原则
- 调试技巧
- 依赖仓库统一配置
- 典型使用场景案例
- 案例1:多项目构建优化
- 案例2:动态包含模块
- 案例3:版本统一管理
- 最佳实践技巧
- 1. 目录结构映射
- 2. 条件化模块加载
- 3. 构建脚本复用
- 配置调试技巧
- 1. 查看最终配置
- 2. 验证目录映射
- 3. 诊断依赖解析
- 常见问题解决方案
- Q1: 模块无法识别?
- Q2: 插件版本冲突?
- 总结
Gradle配置指南:深入解析settings.gradle.kts(Kotlin DSL版)
settings.gradle.kts
作为Gradle项目的入口文件,settings.gradle.kts
(Kotlin DSL版本)负责:
- 定义项目层次结构(单项目/多项目)
- 配置构建的基础环境
- 管理插件和依赖仓库
- 声明全局属性
基础配置选项
单项目配置
// settings.gradle.kts
rootProject.name = "my-single-project" // 必填项// 可选:配置项目描述
rootProject.description = "A simple Kotlin application"
多项目配置
// settings.gradle.kts
rootProject.name = "multiProject"// 包含子模块
//include("auth-service", "chat-service", "common-service")include("auth-service")
include("chat-service")
include("common-service")// 映射物理目录结构(可选)
project(":app").projectDir = file("applications/main-app")
高级配置选项
插件管理(Plugin Management)
在Gradle中,插件就像给项目安装的"扩展包"。比如:
- Java开发需要编译插件
- Android项目需要打包插件
- 测试需要JUnit插件
基础配置模板
pluginManagement
就是管理这些插件的"应用商店设置"
// settings.gradle.kts
pluginManagement {// 第一步:设置插件下载地址repositories {gradlePluginPortal() // Gradle官方插件库mavenCentral() // Maven中央仓库google() // Android专用仓库}// 第二步:统一插件版本plugins {id("org.jetbrains.kotlin.jvm") version "1.9.0"id("com.android.application") version "8.1.0"}
}
- 插件仓库(应用商店)
仓库名称 | 作用 | 使用场景 |
---|---|---|
gradlePluginPortal() | Gradle官方插件市场 | 大多数Java/Kotlin插件 |
mavenCentral() | Maven中央仓库 | 通用依赖 |
google() | Google的Maven仓库 | Android相关插件 |
maven(url) | 自定义仓库地址 | 公司内部私有插件 |
典型配置组合:
repositories {gradlePluginPortal() // 必须保留的基础仓库google() // 开发Android项目时必须maven("https://plugins.my-company.com") // 添加私有仓库
}
- 统一插件版本(重要!)
plugins {// 格式:id("插件ID") version "版本号"id("org.jetbrains.kotlin.jvm") version "1.9.0"id("com.android.application") version "8.1.0"
}
- 统一版本的优势
- 避免多个模块使用不同版本导致冲突
- 确保团队所有成员使用相同环境
- 方便后续升级维护
- 插件ID和版本
- 官方插件市场:https://plugins.gradle.org
- 插件文档(如Android插件):https://developer.android.com/studio/releases/gradle-plugin
案例:Android项目标准配置
pluginManagement {repositories {gradlePluginPortal()google() // 必须添加才能找到Android插件mavenCentral()}plugins {// Android Gradle插件id("com.android.application") version "8.1.0"// Kotlin插件id("org.jetbrains.kotlin.android") version "1.9.0"}
}
- 在模块级
build.gradle.kts
中即可直接使用:plugins {id("com.android.application") // 无需再写版本号id("org.jetbrains.kotlin.android") }
实践原则
- 单一版本原则:全项目统一插件版本
- 显式声明原则:即使默认版本可用也要明确指定
- 注释说明原则:添加版本来源注释
plugins {// 版本来源:https://developer.android.com/studio/releases/gradle-pluginid("com.android.application") version "8.1.0"
}
- 版本同步原则:相关插件保持版本兼容
// Kotlin与AGP版本对应关系
id("org.jetbrains.kotlin.android") version "1.9.0" // 匹配Android Gradle Plugin 8.x
调试技巧
- 查看已解析的插件版本
./gradlew buildEnvironment
输出示例:
...
classpath
+--- com.android.tools.build:gradle:8.1.0
+--- org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0
...
- 强制刷新插件
# 删除Gradle缓存
rm -rf ~/.gradle/caches
新手只需记住:
- 插件管理是项目的基础设置
- 统一版本能避免大多数奇怪问题
- 保持配置简洁明确
依赖仓库统一配置
// settings.gradle.kts
dependencyResolutionManagement {repositoriesMode.set(RepositoriesMode.PREFER_PROJECT) // 或FAIL_ON_PROJECT_REPOSrepositories {mavenCentral()google()maven("https://jitpack.io")}
}
典型使用场景案例
案例1:多项目构建优化
// settings.gradle.kts
rootProject.name = "e-commerce-platform"// 包含子模块
include(":app",":lib:payment",":lib:inventory",":lib:user-service"
)// 统一配置所有子项目
rootProject.children.forEach { project ->project.buildFileName = "${project.name}.gradle.kts"require(project.buildFile.isFile) {"Missing build file: ${project.buildFile}"}
}
案例2:动态包含模块
// settings.gradle.kts
val includeExperimental = properties["includeExperimental"] == "true"if (includeExperimental) {include(":experimental:ai-module")
}
案例3:版本统一管理
// settings.gradle.kts
enableFeaturePreview("VERSION_CATALOGS")dependencyResolutionManagement {versionCatalogs {create("libs") {version("kotlin", "1.9.0")version("coroutines", "1.7.3")library("junit", "junit:junit:4.13.2")}}
}
最佳实践技巧
1. 目录结构映射
// 将传统子目录转换为Gradle模块
include(":legacy-module")
project(":legacy-module").projectDir = file("old-code/module-v2")
2. 条件化模块加载
// 根据环境变量加载测试模块
if (System.getenv("LOAD_TEST_MODULES") == "true") {include(":qa:performance-tests")
}
3. 构建脚本复用
// 共享通用配置
sourceControl {gitRepository(uri("https://github.com/my-org/build-scripts.git")) {producesModule("org.mycompany.gradle:shared-config")}
}
配置调试技巧
1. 查看最终配置
gradle -q projects
2. 验证目录映射
gradle -q projectReport
3. 诊断依赖解析
gradle -q dependencies
常见问题解决方案
Q1: 模块无法识别?
- ✅ 检查
include
语句的路径格式 - ✅ 确认
projectDir
指向正确目录 - ✅ 验证
.gradle.kts
文件命名是否匹配
Q2: 插件版本冲突?
- ✅ 在
pluginManagement
统一指定版本 - ✅ 使用
resolutionStrategy
强制版本
pluginManagement {resolutionStrategy {eachPlugin {when (requested.id.id) {"com.android.application" -> useVersion("8.1.0")}}}
}
总结
通过合理配置settings.gradle.kts
,:
- 🚀 实现多模块项目的优雅管理
- 🔧 统一团队构建环境
- ⚡ 提升构建可维护性
- 🔍 实现动态构建策略
相关文章:

Gradle配置指南:深入解析settings.gradle.kts(Kotlin DSL版)
文章目录 Gradle配置指南:深入解析settings.gradle.kts(Kotlin DSL版)settings.gradle.kts 基础配置选项单项目配置多项目配置 高级配置选项插件管理(Plugin Management)基础配置模板案例:Android项目标准配…...

软件工程经济学-日常作业+大作业
目录 一、作业1 作业内容 解答 二、作业2 作业内容 解答 三、作业3 作业内容 解答 四、大作业 作业内容 解答 1.建立层次结构模型 (1)目标层 (2)准则层 (3)方案层 2.构造判断矩阵 (1)准则层判断矩阵 (2)方案层判断矩阵 3.层次单排序及其一致性检验 代码 …...

论文阅读(三):微阵列数据的图形模型和多变量分析
1.论文链接:Graphical Models and Multivariate Analysis of Microarray Data 摘要: 基因表达数据的通常分析忽略了基因表达值之间的相关性。从生物学上讲,这种假设是不合理的。本章介绍的方法允许通过稀疏高斯图形模型来描述基因之间的相关…...

【大模型LLM面试合集】大语言模型架构_MHA_MQA_GQA
MHA_MQA_GQA 1.总结 在 MHA(Multi Head Attention) 中,每个头有自己单独的 key-value 对;标准的多头注意力机制,h个Query、Key 和 Value 矩阵。在 MQA(Multi Query Attention) 中只会有一组 k…...

向上调整算法(详解)c++
算法流程: 与⽗结点的权值作⽐较,如果⽐它⼤,就与⽗亲交换; 交换完之后,重复 1 操作,直到⽐⽗亲⼩,或者换到根节点的位置 这里为什么插入85完后合法? 我们插入一个85,…...

【Transformer】手撕Attention
import torch from torch import nn import torch.functional as F import mathX torch.randn(16,64,512) # B,T,Dd_model 512 # 模型的维度 n_head 8 # 注意力头的数量多头注意力机制 class multi_head_attention(nn.Module): def __init__(self, d_model, n_hea…...
844.比较含退格的字符串
目录 题目思路解法收获 题目 给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。 注意:如果对空文本输入退格字符,文本继续为空。 思路 如何解退格之后left…...
图书管理系统 Axios 源码__编辑图书
目录 功能概述: 代码实现(index.js): 代码解析: 图书管理系统中,删除图书功能是核心操作之一。下是基于 HTML、Bootstrap、JavaScript 和 Axios 实现的删除图书功能的详细介绍。 功能概述: …...

LabVIEW纤维集合体微电流测试仪
LabVIEW开发纤维集合体微电流测试仪。该设备精确测量纤维材料在特定电压下的电流变化,以分析纤维的结构、老化及回潮率等属性,对于纤维材料的科学研究及质量控制具有重要意义。 项目背景 在纤维材料的研究与应用中,电学性能是评估其性能…...
Commander 一款命令行自定义命令依赖
一、安装 commander 插件 npm install commander 二、基本用法 1. 创建一个简单的命令行程序 创建一个 JavaScript 文件,例如 mycli.js,并添加以下代码: // 引入 commander 模块并获取 program 对象。const { program } require("…...
Day24 洛谷普及2004(内涵前缀和与差分算法)
零基础洛谷刷题记录 Day01 2024.11.18 Day02 2024.11.25 Day03 2024.11.26 Day04 2024.11.28 Day05 2024.11.29 Day06 2024 12.02 Day07 2024.12.03 Day08 2024 12 05 Day09 2024.12.07 Day10 2024.12.09 Day11 2024.12.10 Day12 2024.12.12 Day13 2024.12.16 Day14 2024.12.1…...

遗传算法与深度学习实战(33)——WGAN详解与实现
遗传算法与深度学习实战(33)——WGAN详解与实现 0. 前言1. 训练生成对抗网络的挑战2. GAN 优化问题2.1 梯度消失2.2 模式崩溃 2.3 无法收敛3 Wasserstein GAN3.1 Wasserstein 损失3.2 使用 Wasserstein 损失改进 DCGAN 小结系列链接 0. 前言 原始的生成…...

gitlab云服务器配置
目录 1、关闭防火墙 2、安装gitlab 3、修改配置 4、查看版本 GitLab终端常用命令 5、访问 1、关闭防火墙 firewall-cmd --state 检查防火墙状态 systemctl stop firewalld.service 停止防火墙 2、安装gitlab xftp中导入安装包 [rootgitlab ~]#mkdir -p /service/tool…...

SAP SD学习笔记27 - 请求计划(开票计划)之1 - 定期请求(定期开票)
上两章讲了贩卖契约(框架协议)的概要,以及贩卖契约中最为常用的 基本契约 - 数量契约和金额契约。 SAP SD学习笔记26 - 贩卖契约(框架协议)的概要,基本契约 - 数量契约_sap 框架协议-CSDN博客 SAP SD学习笔记27 - 贩卖契约(框架…...
HTML DOM 修改 HTML 内容
HTML DOM 修改 HTML 内容 引言 HTML DOM(文档对象模型)是浏览器内部用来解析和操作HTML文档的一种机制。通过DOM,我们可以轻松地修改HTML文档的结构、样式和行为。本文将详细介绍如何使用HTML DOM来修改HTML内容,包括元素的增删改查、属性修改以及事件处理等。 1. HTML …...

基于VMware的ubuntu与vscode建立ssh连接
1.首先安装openssh服务 sudo apt update sudo apt install openssh-server -y 2.启动并检查ssh服务状态 到这里可以按q退出 之后输入命令 : ip a 红色挡住的部分就是我们要的地址,这里就不展示了哈 3.配置vscode 打开vscode 搜索并安装:…...
Flutter Candies 一桶天下
| | | | | | | | 入魔的冬瓜 最近刚入桶的兄弟,有责任心的开发者,对自己的项目会不断进行优化,达到最完美的状态 自定义日历组件 主要功能 支持公历,农历,节气,传统节日,常用节假日 …...

maven如何不把依赖的jar打包到同一个jar?
spring boot项目打jar包部署: 经过以下步骤, 最终会形成maven依赖的多个jar(包括lib下添加的)、 我们编写的程序代码打成一个jar,将程序jar与 依赖jar分开,便于管理: success: 最终…...
HTML5 技术深度解读:本地存储与地理定位的最佳实践
系列文章目录 01-从零开始学 HTML:构建网页的基本框架与技巧 02-HTML常见文本标签解析:从基础到进阶的全面指南 03-HTML从入门到精通:链接与图像标签全解析 04-HTML 列表标签全解析:无序与有序列表的深度应用 05-HTML表格标签全面…...

AIGC技术中常提到的 “嵌入转换到同一个向量空间中”该如何理解
在AIGC(人工智能生成内容)技术中,“嵌入转换到同一个向量空间中”是一个核心概念,其主要目的是将不同类型的输入数据(如文本、图像、音频等)映射到一个统一的连续向量空间中,从而实现数据之间的…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...