当前位置: 首页 > news >正文

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版本)负责:

  1. 定义项目层次结构(单项目/多项目)
  2. 配置构建的基础环境
  3. 管理插件和依赖仓库
  4. 声明全局属性

基础配置选项

单项目配置

// 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"
}
  • 统一版本的优势
  1. 避免多个模块使用不同版本导致冲突
  2. 确保团队所有成员使用相同环境
  3. 方便后续升级维护
  • 插件ID和版本
  1. 官方插件市场:https://plugins.gradle.org
  2. 插件文档(如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")
    }
    

实践原则

  1. 单一版本原则:全项目统一插件版本
  2. 显式声明原则:即使默认版本可用也要明确指定
  3. 注释说明原则:添加版本来源注释
plugins {// 版本来源:https://developer.android.com/studio/releases/gradle-pluginid("com.android.application") version "8.1.0" 
}
  1. 版本同步原则:相关插件保持版本兼容
// 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

新手只需记住:

  1. 插件管理是项目的基础设置
  2. 统一版本能避免大多数奇怪问题
  3. 保持配置简洁明确

依赖仓库统一配置

// 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(人工智能生成内容)技术中,“嵌入转换到同一个向量空间中”是一个核心概念,其主要目的是将不同类型的输入数据(如文本、图像、音频等)映射到一个统一的连续向量空间中,从而实现数据之间的…...

深入解析C++中获取进程模块基址的高效实现方法

1. 为什么需要获取进程模块基址 在Windows系统编程中,获取进程模块基址是一个基础但极其重要的操作。简单来说,模块基址就是某个DLL或EXE文件被加载到内存中的起始地址。这个地址就像是模块在内存中的"门牌号",有了它我们才能找到模…...

石油勘探中的地震波“翻译官”:如何读懂时距曲线图里的地下秘密?

石油勘探中的地震波“翻译官”:如何读懂时距曲线图里的地下秘密? 站在戈壁滩的勘探营地,望着屏幕上那些看似杂乱的波形曲线,刚入行的地质工程师小李皱起了眉头。"这些弯弯曲曲的线条,到底在诉说什么样的地下故事&…...

Qwen3.5-9B惊艳案例:128K上下文下跨页PDF内容精准摘要

Qwen3.5-9B惊艳案例:128K上下文下跨页PDF内容精准摘要 1. 模型核心能力展示 Qwen3.5-9B作为一款90亿参数的开源大语言模型,在多个领域展现出令人印象深刻的能力。我们特别测试了其在处理长文档时的表现,结果令人惊喜。 1.1 长上下文处理能…...

Qwen3-14B私有部署镜像算法题求解助手:从理解到实现

Qwen3-14B私有部署镜像算法题求解助手:从理解到实现 1. 为什么算法工程师需要AI助手 算法工程师和求职者每天都要面对各种算法问题,从简单的排序到复杂的动态规划。传统方式下,我们需要反复查阅资料、手动编写测试用例、调试代码&#xff0…...

Java AI推理服务上线即崩?JVM GC日志暴露真相:Metaspace暴涨470%、Direct Memory泄漏12.6GB——5行代码精准修复方案(含Arthas实时监控脚本)

第一章:Java AI推理服务集成概述在现代企业级AI应用架构中,Java凭借其稳定性、丰富的生态和成熟的微服务支持能力,正成为部署AI推理服务的重要后端语言。与Python主导的模型训练场景不同,Java更常用于高并发、低延迟、强事务保障的…...

GLM-OCR赋能微信小程序:开发随身扫描与文档管理工具

GLM-OCR赋能微信小程序:开发随身扫描与文档管理工具 1. 引言 你有没有遇到过这样的场景?开会时看到白板上写满了重要信息,想快速记录下来,却只能对着手机一张张拍照,事后还得手动整理;或者收到一份纸质合…...

代码生成神器实测:Yi-Coder-1.5B在Ollama上的真实体验与效果

代码生成神器实测:Yi-Coder-1.5B在Ollama上的真实体验与效果 1. 开箱体验:Yi-Coder-1.5B初印象 1.1 为什么选择Yi-Coder-1.5B 作为一名经常需要编写各种编程语言的开发者,我一直在寻找一个既轻量又强大的代码生成工具。Yi-Coder-1.5B以其1…...

STM32CubeMX实战指南:从零搭建HAL库项目与LED控制

1. STM32CubeMX与HAL库开发入门 第一次接触STM32开发的朋友可能会被各种专业术语吓到——寄存器、固件库、HAL库、时钟树配置... 作为一个从51单片机转战STM32的"过来人",我完全理解这种困惑。三年前我刚开始用STM32F103时,光是搭建开发环境就…...

Fish Speech 1.5调参指南:温度、Top-P怎么调?一张表看懂所有参数

Fish Speech 1.5调参指南:温度、Top-P怎么调?一张表看懂所有参数 1. 为什么调参很重要?——从“能听”到“好听”的关键一步 你用过语音合成工具吗?是不是经常遇到这种情况:生成的语音虽然每个字都对,但听…...

Pixel Couplet Gen效果展示:乙巳马年像素春联生成惊艳作品集

Pixel Couplet Gen效果展示:乙巳马年像素春联生成惊艳作品集 1. 项目概览 这是一款基于ModelScope大模型驱动的春联生成器。我们创新性地采用夸张的像素游戏风格(Retro Game UI),将传统元素与红白机美学融合,为用户生成独一无二的马年像素春…...