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

news2025/2/3 2:18:44

文章目录

  • 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-plugin
    id("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_REPOS
    repositories {
        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.coloradmin.cn/o/2291052.html

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

相关文章

【机器学习】自定义数据集 使用pytorch框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测,对预测结果计算精确度和召回率及F1分数

一、使用pytorch框架实现逻辑回归 1. 数据部分: 首先自定义了一个简单的数据集,特征 X 是 100 个随机样本,每个样本一个特征,目标值 y 基于线性关系并添加了噪声。将 numpy 数组转换为 PyTorch 张量,方便后续在模型中…

Spring Boot - 数据库集成06 - 集成ElasticSearch

Spring boot 集成 ElasticSearch 文章目录 Spring boot 集成 ElasticSearch一:前置工作1:项目搭建和依赖导入2:客户端连接相关构建3:实体类相关注解配置说明 二:客户端client相关操作说明1:检索流程1.1&…

Java篇之继承

目录 一. 继承 1. 为什么需要继承 2. 继承的概念 3. 继承的语法 4. 访问父类成员 4.1 子类中访问父类的成员变量 4.2 子类中访问父类的成员方法 5. super关键字 6. super和this关键字 7. 子类构造方法 8. 代码块的执行顺序 9. protected访问修饰限定符 10. 继承方式…

ArkTS编程规范

文章目录 目标和适用范围规则来源章节概览代码风格编程实践 术语和定义总体原则命名类名、枚举名、命名空间名采用UpperCamelCase风格变量名、方法名、参数名采用lowerCamelCase风格常量名、枚举值名采用全部大写,单词间使用下划线隔开避免使用否定的布尔变量名&…

深度学习之“向量范数和距离度量”

在深度学习中,范数和向量距离是两个不同的概念。向量范数是一种函数,用于将一个实数或复数向量映射为一个值。虽然范数通常用于度量向量之间的距离,但是同样也有其它的一些表示距离的方式。 范数距离 范数是具有“长度”概念的函数。在向量…

基于Python的简单企业维修管理系统的设计与实现

以下是一个基于Python的简单企业维修管理系统的设计与实现,这里我们会使用Flask作为Web框架,SQLite作为数据库来存储相关信息。 1. 需求分析 企业维修管理系统主要功能包括: 维修工单的创建、查询、更新和删除。设备信息的管理。维修人员…

< OS 有关 > Android 手机 SSH 客户端 app: connectBot

connectBot 开源且功能齐全的SSH客户端,界面简洁,支持证书密钥。 下载量超 500万 方便在 Android 手机上,连接 SSH 服务器,去运行命令。 Fail2ban 12小时内抓获的 IP ~ ~ ~ ~ rootjpn:~# sudo fail2ban-client status sshd Status for the jail: sshd …

【算法设计与分析】实验7:复杂装载及0/1背包问题的回溯法设计与求解

目录 一、实验目的 二、实验环境 三、实验内容 四、核心代码 五、记录与处理 六、思考与总结 七、完整报告和成果文件提取链接 一、实验目的 针对复杂装载问题、及0/1背包问题开展分析、建模、评价,算法设计与优化,并进行编码实践。 理解复杂装载…

仿真设计|基于51单片机的温湿度、一氧化碳、甲醛检测报警系统

目录 具体实现功能 设计介绍 51单片机简介 资料内容 仿真实现(protues8.7) 程序(Keil5) 全部内容 资料获取 具体实现功能 (1)温湿度传感器、CO传感器、甲醛传感器实时检测温湿度值、CO值和甲醛值进…

使用vhd虚拟磁盘安装两个win10系统

使用vhd虚拟磁盘安装两个win10系统 前言vhd虚拟磁盘技术简介准备工具开始动手实践1.winX选择磁盘管理2.选择“操作”--“创建VHD”3.自定义一个位置,输入虚拟磁盘大小4.右键初始化磁盘5.选择GPT分区表格式6.右键新建简单卷7.给卷起个名字,用于区分8.打开…

深入理解Spring事务管理

一、事务基础概念 1.1 什么是事务? 事务(Transaction)是数据库操作的最小工作单元,具有ACID四大特性: 原子性(Atomicity):事务中的操作要么全部成功,要么全部失败 一致…

自制虚拟机(C/C++)(二、分析引导扇区,虚拟机读二进制文件img软盘)

先修复上一次的bug&#xff0c;添加新指令&#xff0c;并增加图形界面 #include <graphics.h> #include <conio.h> #include <windows.h> #include <commdlg.h> #include <iostream> #include <fstream> #include <sstream> #inclu…

ASP.NET Core 启动并提供静态文件

ASP.NET Core 启动并提供静态文件 即是单个可执行文件&#xff0c;它既运行 API 项目&#xff0c;也托管 前端项目&#xff08;通常是前端的发布文件&#xff09;。 这种方式一般是通过将 前端项目 的发布文件&#xff08;例如 HTML、CSS、JavaScript&#xff09;放入 Web AP…

4 [危机13小时追踪一场GitHub投毒事件]

事件概要 自北京时间 2024.12.4 晚间6点起&#xff0c; GitHub 上不断出现“幽灵仓库”&#xff0c;仓库中没有任何代码&#xff0c;只有诱导性的病毒文件。当天&#xff0c;他们成为了 GitHub 上 star 增速最快的仓库。超过 180 个虚假僵尸账户正在传播病毒&#xff0c;等待不…

变量和常量

一.变量 1.标准声明 var 变量名 变量类型 变量声明行末不需要分号 2..批量声明 package main import "fmt" func main(){var(a string b int c boold float32)}3.变量的初始化 var a int 10 var b float321.1 4.类型推导 var name"tom" var age18 fmt.Pr…

大模型概述(方便不懂技术的人入门)

1 大模型的价值 LLM模型对人类的作用&#xff0c;就是一个百科全书级的助手。有多么地百科全书&#xff0c;则用参数的量来描述&#xff0c; 一般地&#xff0c;大模型的参数越多&#xff0c;则该模型越好。例如&#xff0c;GPT-3有1750亿个参数&#xff0c;GPT-4可能有超过1万…

流浪 Linux: 外置 USB SSD 安装 ArchLinux

注: ArchLinux 系统为滚动更新, 变化很快, 所以本文中的安装方法可能很快就过时了, 仅供参考. 实际安装时建议去阅读官方文档. 最近, 突然 (也没有那么突然) 有了一大堆 PC: 4 个笔记本, 2 个台式主机 (M-ATX 主板), 1 个小主机 (迷你主机). 嗯, 多到用不过来. 但是, 窝又不能…

Hot100之子串

560和为K的子数组 题目 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列 思路解析 ps&#xff1a;我们的presum【0】就是0&#xff0c;如果没有这个0的话我们的第一个元素就无法减去上…

网络工程师 (11)软件生命周期与开发模型

一、软件生命周期 前言 软件生命周期&#xff0c;也称为软件开发周期或软件开发生命周期&#xff0c;是指从软件项目的启动到软件不再被使用为止的整个期间。这个过程可以细分为多个阶段&#xff0c;每个阶段都有其特定的目标、任务和产出物。 1. 问题定义与需求分析 问题定义…

(三)QT——信号与槽机制——计数器程序

目录 前言 信号&#xff08;Signal&#xff09;与槽&#xff08;Slot&#xff09;的定义 一、系统自带的信号和槽 二、自定义信号和槽 三、信号和槽的扩展 四、Lambda 表达式 总结 前言 信号与槽机制是 Qt 中的一种重要的通信机制&#xff0c;用于不同对象之间的事件响…