settings.gradle: modullarni qo'shish va pluginManagement

Muallif: IT Sectr Nashr etilgan: 2026-05-31 O'qish vaqti: 9 daq

settings.gradle — bu ko'p modulli loyihaning tuzilishini belgilaydigan asosiy Gradle konfiguratsiya faylidir: qaysi modullar qurilishga kiritilgan, qaysi plaginlar mavjud va bog'liqliklar qanday hal qilinadi. build.gradle har bir modulni qanday qurishni tavsiflasa, settings.gradle loyiha qaysi modullardan iboratligini tavsiflaydi. Gradle Documentation, 2025 ma'lumotlariga ko'ra, settings.gradle-ni to'g'ri konfiguratsiya qilish modullarni hal qilishni optimallashtirish orqali ko'p modulli loyihaning konfiguratsiya vaqtini 25% ga qisqartiradi. Fayl Initialization bosqichida — Gradle qurilish hayot tsiklining birinchisida bajariladi.

Asosiy ma'lumotlar

  • settings.gradle — loyiha tuzilishini tavsiflovchi asosiy konfiguratsiya fayli.
  • include — modulni qurilishga qo'shish uchun direktiva.
  • pluginManagement — Gradle plaginlari versiyalari va ularning repozitoriyalarini boshqarish bloki.
  • dependencyResolutionManagement — bog'liqlik repozitoriyalarini markazlashtirilgan boshqarish.
  • Versiya Kataloglari (libs.versions.toml) kutubxona versiyalarini boshqarish uchun settings.gradle orqali qo'shiladi.

settings.gradle nima?

settings.gradle (yoki Kotlin DSL uchun settings.gradle.kts) — Gradle Initialization bosqichida bajaradigan fayldir. Unda loyiha ierarxiyasi aniqlanadi, modullar qo'shiladi, plaginlar va bog'liqliklar uchun repozitoriyalar sozlanadi. settings.gradle bo'lmasa, Gradle qaysi modullarni qurishni va qaysi plaginlar mavjudligini bilmaydi. Bir modulli loyihada settings.gradle bo'lmasligi mumkin — Gradle standart qiymatlardan foydalanadi, lekin ko'p modulli loyihalar uchun majburiydir.

settings.gradle fayli loyiha ildizida, asosiy build.gradle yonida joylashgan. Loyiha ildizining odatiy tuzilishi: settings.gradle.kts, build.gradle.kts, gradle.properties, local.properties, gradle/wrapper/. settings.gradle build.gradle-dan oldin bajariladi — Initialization bosqichida Gradle loyiha daraxtini quradi (Gradle API-sidagi Project). Initialization tugagandan so'ng Configuration boshlanadi — har bir modulning build.gradle faylining bajarilishi.

Tarixiy jihatdan, settings.gradle Gradle 0.7 (2010) da paydo bo'lgan va dastlab faqat include direktivalarini o'z ichiga olgan. Gradle rivojlanishi bilan settings.gradle-ga pluginManagement (Gradle 6.8), dependencyResolutionManagement (Gradle 7.0) va versionCatalogs (Gradle 7.4) qo'shildi. Zamonaviy settings.gradle — bu butun loyiha uchun plaginlar, repozitoriyalar va versiyalarni markazlashtiradigan kuchli konfiguratsiya faylidir. Google bu imkoniyatlarni AGP 8.0 dan boshlab Android Gradle Plugin-da mustahkamlaydi.

settings.gradle vs build.gradle

settings.gradle loyiha tuzilishini va global sozlamalarni boshqaradi (plaginlar, repozitoriyalar). build.gradle qurilishni boshqaradi (bog'liqliklar, Android konfiguratsiyalari, vazifalar). settings.gradle birinchi bajariladi va Settings API ga kirish huquqiga ega. build.gradle keyinroq bajariladi va Project API ga kirish huquqiga ega. Hech qanday modul konfiguratsiyalari (android bloki, dependencies) settings.gradle-da bo'lishi mumkin emas — bu xato.

include orqali modullarni qo'shish

include direktivasi settings.gradle-dagi asosiy direktivadir. U Gradle-ga qaysi modullar qurilishda ishtirok etishi kerakligini bildiradi. include argumenti — modul yo'li: include(":app") — ildizdagi modulni qo'shadi, include(":core:network") — core/network/ pastki katalogidagi modulni qo'shadi. Boshidagi ikki nuqta yo'lning loyiha ildiziga nisbatan ekanligini ko'rsatadi. include-dan so'ng, Gradle avtomatik ravishda ko'rsatilgan katalogda build.gradle-ni topadi va modulni loyiha daraxtiga qo'shadi.

Har bir include Gradle API-sida include qatoriga teng nom bilan Project yaratadi. Loyiha nomi boshqa modullarning build.gradle fayllarida implementation(project(":module")) uchun ishlatiladi. Agar modul include orqali qo'shilmagan bo'lsa, boshqa moduldan unga havola "Project not found" xatosiga olib keladi. Android Studio IDE ham Project panelida modullarni ko'rsatish uchun settings.gradle-dan foydalanadi — include bo'lmagan modullar fayl daraxtida ko'rinmaydi.

include included builds va composite builds ni includeBuild("../library-project") orqali qo'llab-quvvatlaydi. Bu butun Gradle loyihalarini tashqi modullar sifatida qo'shish imkonini beradi. Included builds kutubxonalarni ilova bilan parallel rivojlantirish uchun foydalidir: kutubxonadagi o'zgarishlar maven repozitoriyasiga nashr qilinmasdan darhol ilovada ko'rinadi. Ishlab chiqarish qurilishida includeBuild oddiy maven bog'liqligi bilan almashtiriladi.

kotlin
// settings.gradle.kts — odatiy tuzilma
rootProject.name = "MyApp"

// Ilova modullari
include(":app")
include(":core:network")
include(":core:database")
include(":core:ui")
include(":feature:home")
include(":feature:profile")
include(":feature:settings")

// Tashqi kutubxonani qo'shish (composite build)
includeBuild("../my-analytics-lib") {
    dependencySubstitution {
        substitute(module("com.example:analytics"))
            .using(project(":analytics"))
    }
}

Plugin Management Bloki

Resolution Strategy

pluginManagement — settings.gradle-da Gradle plaginlari qayerdan yuklanishini belgilaydigan blok. Gradle 6.8 da plaginlarni qo'llashdan oldin markazlashtirilgan boshqarish uchun paydo bo'lgan. pluginManagement ichida joylashgan: repositories (plaginlarni qidirish uchun repozitoriyalar ro'yxati), resolutionStrategy (versiyalarni hal qilish qoidalari) va plugins (plagin versiyalarini aniq ko'rsatish). Agar pluginManagement sozlanmagan bo'lsa, Gradle build.gradle-dagi repozitoriyalardan foydalanadi — lekin plaginlar faqat e'lon qilinganidan keyin qidiriladi, bu plagin topilmasa xatolarga olib keladi.

Android loyihasida pluginManagement Versiya Kataloglari yoki Convention Plugins ishlatilganda majburiydir. pluginManagement bo'lmasa, Gradle build.gradle.kts da qo'llashda com.android.application plaginini topa olmaydi. Odatiy konfiguratsiya: repositories google() (Android plaginlari), mavenCentral() (uchinchi tomon plaginlari) va gradlePluginPortal() (rasmiy Gradle plaginlari) ni o'z ichiga oladi.

pluginManagement shuningdek plugins ni qo'llab-quvvatlaydi — versiyalar bilan plaginlarni e'lon qilish, keyin build.gradle-da versiya ko'rsatilmagan holda qo'llaniladi. Bu plagin versiyalarini markazlashtiradi: agar 10 modul kotlin-android ni qo'llasa, versiya pluginManagement-da bir marta ko'rsatiladi. Muhim: pluginManagement.plugins faqat e'lon. Plaginning o'zi build.gradle-da plugins { id("org.jetbrains.kotlin.android") } orqali qo'llaniladi.

kotlin
pluginManagement {
    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
        maven { url = "https://jitpack.io" }
    }

    // Plagin versiyalari — markazlashtirilgan
    plugins {
        id("com.android.application") version "8.7.0"
        id("com.android.library") version "8.7.0"
        id("org.jetbrains.kotlin.android") version "2.0.21"
        id("com.google.devtools.ksp") version "2.0.21-1.0.25"
    }

    resolutionStrategy {
        // Barcha modullar uchun majburiy plagin versiyasi
        eachPlugin {
            if (requested.id.id == "com.google.gms.google-services") {
                useVersion("4.4.2")
            }
        }
    }
}

plugins {
    // Plaginlarni qo'llash — apply false (ildizga qo'llanilmasin)
    id("com.android.application") apply false
    id("org.jetbrains.kotlin.android") apply false
}

Dependency Resolution Management

repositoriesMode rejimlari

dependencyResolutionManagement — settings.gradle-da barcha modullar uchun repozitoriyalarni markazlashtirilgan holda boshqaradigan blok. Gradle 7.0 da har bir build.gradle-da repositories e'lon qilishga muqobil sifatida paydo bo'lgan. Blok ichida repositoriesMode (rejim: PREFER_PROJECT, PREFER_SETTINGS yoki FAIL_ON_PROJECT_REPOS) va repositories (repozitoriyalar ro'yxati) o'rnatiladi. Agar repositoriesMode = PREFER_SETTINGS bo'lsa, modul repositories-lari e'tiborga olinmaydi — faqat markazlashtirilgan ro'yxat ishlatiladi.

repositoriesMode uchta qiymatga ega bo'lishi mumkin. PREFER_SETTINGS — build.gradle-dagi repozitoriyalar e'tiborga olinmaydi, faqat settings.gradle-dagilar ishlatiladi. PREFER_PROJECT — build.gradle repozitoriyalari settings.gradle ustidan ustunlikka ega. FAIL_ON_PROJECT_REPOS — agar modul o'z repozitoriyalarini e'lon qilsa, Gradle xato beradi. Yangi loyihalar uchun PREFER_SETTINGS tavsiya etiladi — bu barcha modullarning bir xil repozitoriyalardan foydalanishini kafolatlaydi va takrorlanishni bartaraf qiladi.

repositoriesMode = FAIL_ON_PROJECT_REPOS ayniqsa jamoalarda foydalidir: agar dasturchi repozitoriyani faqat bitta modulga qo'shsa, qolganlari uni ko'rmaydi, "works on my machine" holati yuzaga keladi. FAIL_ON_PROJECT_REPOS barcha repozitoriyalarni settings.gradle-da markazlashtirilgan holda e'lon qilishni majburlaydi va bunday holatlarning oldini oladi. Google AGP 8.0 dan boshlab barcha Android loyihalari uchun FAIL_ON_PROJECT_REPOS ni tavsiya qiladi.

kotlin
dependencyResolutionManagement {
    // FAIL_ON_PROJECT_REPOS — barcha repozitoriyalar faqat shu yerda
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)

    repositories {
        google()
        mavenCentral()
        maven { url = "https://jitpack.io" }

        // Xususiy maven repozitoriyasi
        maven {
            url = "https://maven.pkg.github.com/company/internal-lib"
            credentials {
                username = providers.gradleProperty("gpr.user")
                    .getOrNull() ?: System.getenv("GPR_USER") ?: ""
                password = providers.gradleProperty("gpr.key")
                    .getOrNull() ?: System.getenv("GPR_KEY") ?: ""
            }
        }
    }
}

// Modulning build.gradle faylida repositories endi kerak emas!
// Barcha repozitoriyalar settings.gradle da markazlashtirilgan

settings.gradle-da Versiya Kataloglari

Versiya Kataloglari — bu TOML fayli orqali bog'liqlik versiyalarini boshqarishning markazlashtirilgan usulidir. Gradle 7.4 dan boshlab, Versiya Kataloglari barcha Android loyihalari uchun tavsiya etilgan mexanizmdir. gradle/libs.versions.toml fayli uchta bo'limdan iborat: [versions] (versiyalar), [libraries] (bog'liqliklar), [plugins] (plaginlar). settings.gradle-da Versiya Katalogi @Suppress("UnstableApiUsage") va enableFeaturePreview("VERSION_CATALOGS") (eski Gradle versiyalarida) orqali qo'shiladi.

Versiya Katalogi qo'shilgandan so'ng, modullarning build.gradle fayllarida bog'liqliklar libs orqali ko'rsatiladi: implementation(libs.retrofit). IDE libs uchun avtomatik to'ldirishni taklif qiladi. Katalog avtomatik ravishda type-safe accessors yaratadi: libs.retrofit, libs.kotlin.coroutines, libs.bundles.compose. Bundles — bir qator bilan qo'shilishi mumkin bo'lgan bog'liqlik guruhlari. Versiya Kataloglari shuningdek merosni qo'llab-quvvatlaydi — bir nechta TOML fayllari qo'shilishi mumkin.

Versiya Kataloglarining afzalliklari: versiyalar uchun yagona joy (barcha build.gradle fayllarida qidirish shart emas); type-safe kirish (libs nomidagi xato kompilyatsiya bosqichida aniqlanadi, runtime-da emas); avtomatik yangilanishlar (Dependabot va Renovate TOML ni qo'llab-quvvatlaydi); Convention Plugins bilan muvofiqlik. Google Firebase va AndroidX o'z TOML kataloglarini tarqatadi. Versiya Kataloglariga migratsiya uchun versiyalarni build.gradle-dan TOML-ga avtomatik ko'chiradigan plaginlar mavjud.

toml
# gradle/libs.versions.toml
[versions]
agp = "8.7.0"
kotlin = "2.0.21"
composeBom = "2024.12.01"
retrofit = "2.11.0"
coroutines = "1.9.0"

[libraries]
retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" }
retrofit-gson = { module = "com.squareup.retrofit2:converter-gson", version.ref = "retrofit" }
kotlin-coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines" }
compose-bom = { module = "androidx.compose:compose-bom", version.ref = "composeBom" }
compose-ui = { module = "androidx.compose.ui:ui" }

[bundles]
compose = ["compose-ui", "compose-material3"]

[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }

Ilg'or sozlamalar: includeBuild va inkubatsiya xususiyatlari

includeBuild — composite build yaratish uchun direktiva: tashqi Gradle loyihasini joriy qurilishning bir qismi sifatida qo'shish. include dan (modulni qo'shadi) farqli o'laroq, includeBuild o'z settings.gradle, modullari va plaginlari bilan butun loyihani qo'shadi. Composite builds quyidagilar uchun ishlatiladi: kutubxonalarni (analitika, tarmoq) ilova bilan parallel rivojlantirish; alohida repozitoriyadan Convention Plugins qo'shish; build-logic modulini integratsiya qilish.

Inkubatsiya xususiyatlari (Incubating Features) — enableFeaturePreview("FEATURE_NAME") orqali yoqiladigan eksperimental Gradle variantlari. AGP 8.7+ da mavjud: TYPESAFE_PROJECT_ACCESSORS (ko'p modulli loyihada loyihalarga type-safe kirish: project(":core:network") o'rniga projects.core.network yozish mumkin), STABLE_CONFIGURATION_CACHE (barqaror konfiguratsiya keshi), ARTIFACT_TRANSFORM_FOR_INTERNAL_TEST (artefaktlarni transformatsiya qilish). Inkubatsiya xususiyatlari ishlab chiqarishda yoqilishi mumkin, ammo API keyingi versiyalarda o'zgarishi mumkin.

Gradle Enterprise va Build Scan ham settings.gradle orqali sozlanadi: plugins { id("com.gradle.enterprise") } gradleEnterprise bloki bilan. Build Scan — har bir qurilish haqida batafsil ma'lumotni ko'rsatadigan bulut xizmati: har bir vazifaning bajarilish vaqti, keshlash, xatolar. Build Scan-ni yoqish qurilish tezligi bilan bog'liq muammolarni diagnostika qilishga yordam beradi. Opensource loyihalar uchun Build Scan bepul.

kotlin
// Inkubatsiya xususiyatlari
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
enableFeaturePreview("STABLE_CONFIGURATION_CACHE")

// Gradle Enterprise / Build Scan
plugins {
    id("com.gradle.enterprise") version "3.18"
}

gradleEnterprise {
    buildScan {
        termsOfServiceUrl = "https://gradle.com/terms-of-service"
        termsOfServiceAgree = "yes"
        publishAlwaysIf(true)
    }
}

// build.gradle da type-safe project accessors dan foydalanish
// O'rniga: implementation(project(":core:network"))
// Mumkin: implementation(projects.core.network)

Tez-tez so'raladigan savollar

Android loyihasi uchun settings.gradle majburiymi?

Bir modulli loyiha uchun Gradle standart qiymatlardan foydalanishi mumkin. Ammo AGP 8+ uchun har doim settings.gradle bo'lishi tavsiya etiladi, chunki pluginManagement va dependencyResolutionManagement Versiya Kataloglari va Convention Plugins ning to'g'ri ishlashi uchun majburiydir.

include va includeBuild o'rtasidagi farq nima?

include joriy loyihadan modulni qo'shadi (bitta modul daraxti). includeBuild tashqi Gradle loyihasini composite build sifatida qo'shadi. includeBuild kutubxonalarni bir repozitoriyada rivojlantirish yoki Convention Plugins qo'shish uchun qulay.

settings.gradle-ga yangi modulni qanday qo'shish kerak?

settings.gradle-ga include(":nom:modul") qo'shing va build.gradle bilan katalog yarating. Android Studio modul yaratishda buni avtomatik qiladi: File → New → New Module. Qo'shgandan so'ng, Sync Project with Gradle Files ni bajaring.

pluginManagement build.gradle-da bo'lishi mumkinmi?

Yo'q, pluginManagement faqat settings.gradle blokidir. Initialization bosqichida, har qanday build.gradle fayllari bajarilishidan oldin ishga tushadi. build.gradle-da plaginlar faqat qo'llaniladi, lekin boshqarilmaydi.

dependencyResolutionManagement bo'lmasa nima bo'ladi?

Har bir modul o'z build.gradle-ida repositories e'lon qilishi kerak bo'ladi. Bu kodning takrorlanishi va desinxronizatsiya xavfi (bir modulga repozitoriy qo'shilgan, boshqasiga — yo'q). dependencyResolutionManagement repozitoriyalarni markazlashtiradi va "works on my machine" xatolarining oldini oladi.

Xulosa

  • settings.gradle — loyiha tuzilishini aniqlash uchun Initialization bosqichida bajariladigan asosiy konfiguratsiya fayli.
  • include modullarni qurilishga qo'shadi; includeBuild tashqi Gradle loyihalarini integratsiya qiladi.
  • pluginManagement barcha modullar uchun plagin repozitoriyalari va versiyalarini markazlashtiradi.
  • dependencyResolutionManagement repositoriesMode=FAIL_ON_PROJECT_REPOS bilan repozitoriyalar takrorlanishini bartaraf qiladi.
  • Versiya Kataloglari (libs.versions.toml) bog'liqlik versiyalarini type-safe boshqarishni ta'minlaydi.
  • Inkubatsiya xususiyatlari (Typesafe Project Accessors, Configuration Cache) qurilishni tezlashtiradi va kodni soddalashtiradi.
  • Tavsiya: zamonaviy loyihalar uchun Kotlin DSL, Versiya Kataloglari, FAIL_ON_PROJECT_REPOS va enableFeaturePreview dan foydalaning.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing