IT评测·应用市场-qidao123.com

标题: Gradle配置指南:深入剖析settings.gradle.kts(Kotlin DSL版) [打印本页]

作者: 反转基因福娃    时间: 2025-2-23 15:10
标题: Gradle配置指南:深入剖析settings.gradle.kts(Kotlin DSL版)
Gradle配置指南:深入剖析settings.gradle.kts(Kotlin DSL版)

settings.gradle.kts

作为Gradle项目的入口文件,settings.gradle.kts(Kotlin DSL版本)负责:

底子配置选项

单项目配置

  1. // settings.gradle.kts
  2. rootProject.name = "my-single-project" // 必填项
  3. // 可选:配置项目描述
  4. rootProject.description = "A simple Kotlin application"
复制代码
多项目配置


  1. // settings.gradle.kts
  2. rootProject.name = "multiProject"
  3. // 包含子模块
  4. //include("auth-service", "chat-service", "common-service")
  5. include("auth-service")
  6. include("chat-service")
  7. include("common-service")
  8. // 映射物理目录结构(可选)
  9. project(":app").projectDir = file("applications/main-app")
复制代码

高级配置选项

插件管理(Plugin Management)

在Gradle中,插件就像给项目安装的"扩展包"。比如:

底子配置模板


  1. // settings.gradle.kts
  2. pluginManagement {
  3.     // 第一步:设置插件下载地址
  4.     repositories {
  5.         gradlePluginPortal()  // Gradle官方插件库
  6.         mavenCentral()        // Maven中央仓库
  7.         google()              // Android专用仓库
  8.     }
  9.     // 第二步:统一插件版本
  10.     plugins {
  11.         id("org.jetbrains.kotlin.jvm") version "1.9.0"
  12.         id("com.android.application") version "8.1.0"
  13.     }
  14. }
复制代码

仓库名称作用使用场景gradlePluginPortal()Gradle官方插件市场大多数Java/Kotlin插件mavenCentral()Maven中央仓库通用依靠google()Google的Maven仓库Android相关插件maven(url)自定义仓库地点公司内部私有插件 典范配置组合:
  1. repositories {
  2.     gradlePluginPortal()  // 必须保留的基础仓库
  3.     google()              // 开发Android项目时必须
  4.     maven("https://plugins.my-company.com") // 添加私有仓库
  5. }
复制代码


  1. plugins {
  2.     // 格式:id("插件ID") version "版本号"
  3.     id("org.jetbrains.kotlin.jvm") version "1.9.0"
  4.     id("com.android.application") version "8.1.0"
  5. }
复制代码



案例:Android项目尺度配置

  1. pluginManagement {
  2.     repositories {
  3.         gradlePluginPortal()
  4.         google()  // 必须添加才能找到Android插件
  5.         mavenCentral()
  6.     }
  7.    
  8.     plugins {
  9.         // Android Gradle插件
  10.         id("com.android.application") version "8.1.0"
  11.         // Kotlin插件
  12.         id("org.jetbrains.kotlin.android") version "1.9.0"
  13.     }
  14. }
复制代码


实践原则

  1. plugins {
  2.     // 版本来源:https://developer.android.com/studio/releases/gradle-plugin
  3.     id("com.android.application") version "8.1.0"
  4. }
复制代码
  1. // Kotlin与AGP版本对应关系
  2. id("org.jetbrains.kotlin.android") version "1.9.0"  // 匹配Android Gradle Plugin 8.x
复制代码

调试技巧


  1. ./gradlew buildEnvironment
复制代码
输出示例:
  1. ...
  2. classpath
  3. +--- com.android.tools.build:gradle:8.1.0
  4. +--- org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0
  5. ...
复制代码

  1. # 删除Gradle缓存
  2. rm -rf ~/.gradle/caches
复制代码

新手只需记着:
依靠仓库同一配置

  1. // settings.gradle.kts
  2. dependencyResolutionManagement {
  3.     repositoriesMode.set(RepositoriesMode.PREFER_PROJECT) // 或FAIL_ON_PROJECT_REPOS
  4.     repositories {
  5.         mavenCentral()
  6.         google()
  7.         maven("https://jitpack.io")
  8.     }
  9. }
复制代码
典范使用场景案例

案例1:多项目构建优化

  1. // settings.gradle.kts
  2. rootProject.name = "e-commerce-platform"
  3. // 包含子模块
  4. include(
  5.     ":app",
  6.     ":lib:payment",
  7.     ":lib:inventory",
  8.     ":lib:user-service"
  9. )
  10. // 统一配置所有子项目
  11. rootProject.children.forEach { project ->
  12.     project.buildFileName = "${project.name}.gradle.kts"
  13.     require(project.buildFile.isFile) {
  14.         "Missing build file: ${project.buildFile}"
  15.     }
  16. }
复制代码
案例2:动态包罗模块

  1. // settings.gradle.kts
  2. val includeExperimental = properties["includeExperimental"] == "true"
  3. if (includeExperimental) {
  4.     include(":experimental:ai-module")
  5. }
复制代码
案例3:版本同一管理

  1. // settings.gradle.kts
  2. enableFeaturePreview("VERSION_CATALOGS")
  3. dependencyResolutionManagement {
  4.     versionCatalogs {
  5.         create("libs") {
  6.             version("kotlin", "1.9.0")
  7.             version("coroutines", "1.7.3")
  8.             
  9.             library("junit", "junit:junit:4.13.2")
  10.         }
  11.     }
  12. }
复制代码

最佳实践技巧

1. 目次布局映射

  1. // 将传统子目录转换为Gradle模块
  2. include(":legacy-module")
  3. project(":legacy-module").projectDir = file("old-code/module-v2")
复制代码
2. 条件化模块加载

  1. // 根据环境变量加载测试模块
  2. if (System.getenv("LOAD_TEST_MODULES") == "true") {
  3.     include(":qa:performance-tests")
  4. }
复制代码
3. 构建脚本复用

  1. // 共享通用配置
  2. sourceControl {
  3.     gitRepository(uri("https://github.com/my-org/build-scripts.git")) {
  4.         producesModule("org.mycompany.gradle:shared-config")
  5.     }
  6. }
复制代码

配置调试技巧

1. 检察终极配置

  1. gradle -q projects
复制代码
2. 验证目次映射

  1. gradle -q projectReport
复制代码
3. 诊断依靠剖析

  1. gradle -q dependencies
复制代码

常见问题办理方案

Q1: 模块无法辨认?


Q2: 插件版本冲突?


  1. pluginManagement {
  2.     resolutionStrategy {
  3.         eachPlugin {
  4.             when (requested.id.id) {
  5.                 "com.android.application" ->
  6.                     useVersion("8.1.0")
  7.             }
  8.         }
  9.     }
  10. }
复制代码

总结

通过合理配置settings.gradle.kts,: