Gradle配置指南:深入解析settings.gradle.kts(Kotlin DSL版)

article/2025/8/12 8:07:12

文章目录

  • 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,:

  • 🚀 实现多模块项目的优雅管理
  • 🔧 统一团队构建环境
  • ⚡ 提升构建可维护性
  • 🔍 实现动态构建策略

http://www.hkcw.cn/article/pwHEPivaAN.shtml

相关文章

Android SDK安装与配置(小白教程)

目录 1、下载: 2、安装: 3、配置环境变量: 4、验证是否安装成功: Android SDK(软件开发工具包)是一套为开发者提供的全面工具和资源集合,涵盖不同版本平台、各类开发与调试工具、支持库等&a…

[wsl2]MacOS/Win局域网ssh连接wsl2:Ubuntu24.04 LTS

【wsl2】MacOS/Win局域网ssh连接wsl2:Ubuntu24.04 LTS 保证使用的是微软应用商店中下载的Ubuntu发行版本,本文在配置时发现若使用docker所基于的ubuntu系统配置会失败。遂采用默认的子发行版本。写在前面why wsl2?win11的好处 开始配置之前1.…

JAVA游戏打手俱乐部护航小程序+APP+公众号+h5 源码游戏陪玩小程序系统

一、系统概述 JAVA 游戏打手俱乐部护航陪玩系统是一款集小程序、APP、公众号和 H5 于一体的综合性游戏陪玩平台。该系统凭借丰富多样的功能,为游戏玩家和陪玩师傅搭建了便捷的沟通桥梁。其主要功能包括精准分类、优惠券管理、我的团队、师傅申请入驻、师傅端抢单机…

使用Mac下载MySQL修改密码第一篇_数据库

Mac下载MySQL MySQL官网链接MySQL​​​​​​ 当进入到官网后下滑到community社区,进行下载 然后选择community sever下载 这里就是要下载的界面,如果需要下载之前版本的话可以点击archives, 可能会因为这是外网原因,有时候下…

【Mac 从 0 到 1 保姆级配置教程 08】- 快速配置 Neovim、LazyVim 以及常用开发环境,如果之前有人这么写就好了

文章目录 2. 安装 Neovim3. 安装 LazyVim3.1. 安装依赖3.2. 安装 LazyVim3.3. 问题修复 4. 配置 LazyVim4.1. 基础知识4.2. 内置快捷键4.3. 自定义快捷键4.4. 配置主题4.5. 配置 C/C 环境4.6. 配置 JSON 和 Markdown 5. 最后6. 参考资料7. 系列教程 Mac 从 0 到 1 保姆级配置教…

Android SMS发送技术指南

本文还有配套的精品资源,点击获取 简介:本文详细介绍了在Android平台上如何使用编程接口(API)发送短信,包括 SmsManager 类的使用、调试技巧和设备兼容性处理。通过实例代码展示了如何实现文本消息的发送&#xf…

AndroidStudio创建Android虚拟机教程

前言 在 Android 开发的世界中,拥有一个可靠且灵活的测试环境是至关重要的。Android Studio 提供了虚拟设备(AVD)管理器,这是一个强大的工具,允许开发者创建自定义的虚拟设备来模拟不同的 Android 设备。通过 AVD&…

uniapp 小程序 web-view 打开H5页面传参以及调用postMessage回传参数

uniapp 小程序 web-view 打开H5页面传参以及调用postMessage回传参数 uniapp 运行微信小程序,在小程序内利用 web-view 打开H5页面进行数据流转的总结。 首先做点准备工作,官网明确的说了小程序是不支持本地的,那怎么进行调试呢,…

mac 下载nvm

先在终端查看是否安装brew brew -v显示版本,开始下一步,如果不显示版本,则需要先安装brew 安装brew 使用brew安装nvm 执行安装命令 brew install nvm配置环境变量 配置环境变量之前,先查看nvm下载的位置 brew list nvm这是…

Android的uid~package~pid的关系

UID : Linux 系统级用户标识,Android 中每个应用安装时分配唯一 UID(如 1000)。 Package: Android 应用包名(例如android),一个 UID 可关联多个 Package(共享 UID 场景如android:sharedUserI…

Rust 学习笔记:发布一个 crate 到 crates.io

Rust 学习笔记:发布一个 crate 到 crates.io Rust 学习笔记:发布一个 crate 到 crates.io提供有用的文档注释常用标题文档注释作为测试注释所包含的项目 使用 pub use 导出一个方便的公共 API设置 crates.io 账户添加 metadata 到一个新的 crate发布到 c…

大白话 Seata 分布式事务浅析,详解TCC模式

大家好,我是此林。 说到分布式事务,第一时间想到 Seata,它支持多种事务模型,比如:XA模式、AT模式、TCC模式、Saga模式(长事务)。 其中 TCC 模式是高性能分布式事务解决方案,适用于核心系统等对 性能有很高…

超标量处理器设计6-指令解码

1. 指令缓存 指令缓存本质上是一个FIFO, 它能够将指令按照程序中指定的顺序存储起来,这样指令在解码的时候,仍然可以按照程序中指定的顺序进行解码。指令缓存是超标量处理器中必须的部件,其原因有两个: 1. 每周期可以取指的个数大…

技嘉华硕微星主板BIOS开启TPM模块教程

目录 一. TPM模块安装 二. 在BIOS开启TPM功能 华硕主板(Intel平台) 华硕主板(AMD平台) 技嘉主板(Intel平台) 技嘉主板(AMD平台) 微星主板(Intel平台) …

java基础知识

ASCII码 1. next() 示例​​ 读取一个字符串(遇到空格或换行符停止) 运行示例:​​ 输入: 张三 李四 输出: 张三 // 只读取了"张三","李四"留在输入缓冲区

【解决】【亲测下载obsidian可行】打不开github.com 或者 加速访问 github

Windows系统 基本思路:通过修改IP绑定来实现加速访问 1、hosts文件目录 C:\Windows\System32\drivers\etc\hosts2、修改内容 2.1 ping github.com 在Windows的cmd页面下直接输入: ping github.comPS:这一步只是看一下,没在后…

逆向入门(1)

前言: 本篇文章面向想入门逆向的新手小白。 NSSCTF和BUUCTF是两个刷题网站,知识点下面会有对应的题,大家可以自己试着做一下 NSSCTF:https://www.nssctf.cn/problem BUUCTF:https://buuoj.cn/challenges 1.看exe模式(位数&am…

经典算法回顾之最小生成树

最小生成树(Minimum Spanning Tree,简称MST)是图论中的一个重要概念,主要用于解决加权无向图中连接所有顶点且总权重最小的树结构问题。本文对两种经典的算法即Prim算法和Kruskal算法进行回顾,并对后者的正确性给出简单…

Java八股文智能体——Agent提示词(Prompt)

这个智能体能够为正在学习Java八股文的同学提供切实帮助:不仅可以帮你优化答案表述,还能直接解答八股文相关问题——它会以面试者的视角,给出贴合求职场景的专业回答。 将以下内容发送给任何一个LLM,他会按照你提示词的内容&…

VScode编译调试debug,gpu的cuda程序,Nsight

进行下面操作的前提是,我们的环境已经能跑简单的CUDA程序了。 一、安装Nsight 二、创建launch.json文件 {"version": "0.2.0","configurations": [{"name": "CUDA C: Launch","type": "cuda-gdb…