Gradle KTS — шта је то, Kotlin DSL за Gradle и синтакса

Аутор: IT Sectr Објављено: 2026-06-05 Време читања: 8 мин

Gradle KTS — је Kotlin DSL за систем изградње Gradle, који омогућава писање build-скрипти у језику Kotlin уместо Groovy. Датотеке са екстензијом .gradle.kts подржавају статичко типизирање, аутоматско довршавање у IntelliJ IDEA и Android Studio, као и директан приступ API-ју Gradle кроз Kotlin синтаксу. Google препоручује KTS за Android пројекте почев од AGP 7.0, а Kotlin Multiplatform користи KTS као стандардни формат конфигурације. Према подацима Gradle, 2025, више од 60% нових пројеката бира KTS уместо Groovy за писање build-скрипти.

Главно

  • Gradle KTS — Kotlin DSL за build-скрипте Gradle са екстензијом .gradle.kts.
  • Статичко типизирање — провера конфигурације у фази компилације, а не у runtime-у.
  • IDE подршка — аутоматско довршавање, навигација и рефакторисање у IntelliJ IDEA и Android Studio.
  • Google препорука — KTS препоручен за Android пројекте од AGP 7.0.
  • Миграција — прелазак са Groovy на KTS може се извршити постепено за сваки модул.

Шта је Gradle KTS?

Gradle KTS — је Kotlin DSL (Domain Specific Language), који представља алтернативу Groovy-ју за писање конфигурационих датотека Gradle-а. Уместо Groovy синтаксе, програмери користе Kotlin — строго типизиран језик који проверава исправност конфигурације у фази компилације. KTS је први пут представљен у Gradle 5.0 2018. године као експериментална функција и достигао је стабилност у Gradle 6.0.

Главни циљ KTS-а је да отклони недостатке Groovy-ја у build-скриптама. Groovy — динамички типизиран језик, у којем се грешке конфигурације појављују тек у runtime-у приликом извршавања задатака. KTS омогућава откривање истих грешака у фази уређивања кода захваљујући статичком типизирању Kotlin-а. Додатно, KTS пружа приступ API-ју Gradle-а са потпуном документацијом типова, што значајно олакшава учење и коришћење сложених конфигурационих блокова.

Екосистем KTS-а подржан је од стране свих главних алата: Android Studio, IntelliJ IDEA, VS Code са Kotlin додатком и Gradle Build Tool. Сви модерни додаци (Android Gradle Plugin, Kotlin Multiplatform, Protobuf, Compose) пружају Kotlin-пријатељски API са експлицитним типовима, што чини KTS пожељним избором за нове пројекте.

Како ради Gradle KTS

Gradle KTS користи Kotlin компајлер за обраду .gradle.kts датотека. Gradle препознаје екстензију и прослеђује скрипте Kotlin скрипт мотору, који их компилира у класе. Ове класе затим Gradle извршава за изградњу модела пројекта. Кључна разлика у односу на Groovy: KTS скрипте се компилирају унапред, а не интерпретирају динамички, што омогућава откривање грешака пре почетка извршавања задатака.

Архитектура KTS-а заснована је на kotlin-scripting-у. Свака .gradle.kts датотека је Kotlin скрипта са имплицитним импортима Gradle API-ја. Програмер може користити било које Kotlin конструкције: extension функције, ламбде, data класе, па чак и декларисати помоћне функције унутар build-скрипте. Gradle пружа скуп extension функција за типизирану конфигурацију блокова: dependencies, android, kotlin и других.

kotlin
plugins {
    id("com.android.application") version "8.4.0"
    kotlin("android") version "2.0.21"
}

android {
    namespace = "com.itsectr.app"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.itsectr.app"
        minSdk = 26
        targetSdk = 34
        versionCode = 1
        versionName = "1.0.0"
    }
}

dependencies {
    implementation(platform("androidx.compose:compose-bom:2024.06.00"))
    implementation("androidx.compose.ui:ui")
    implementation("androidx.core:core-ktx:1.13.1")
}

Конверзија типова у KTS-у

Једна од кључних разлика између KTS-а и Groovy-ја је рад са типовима. У Groovy-ју све конфигурације примају Object, у KTS-у — конкретне Kotlin типове. На пример, compileSdk прима Int, а не стринг. Ово искључује грешке везане за неисправан тип: у Groovy-ју compileSdk 34 и compileSdk „34” раде исто, у KTS-у само прва варијанта. Оваква строгост чини конфигурацију предвидљивијом и документованијом.

Gradle KTS vs Groovy: поређење

Groovy је био оригинални DSL за Gradle и остаје потпуно подржан. Међутим, KTS нуди низ предности које га чине препорученим за нове пројекте. Статичко типизирање, боље перформансе уређивања у IDE-у и строжа синтакса — главни разлози за прелазак на KTS. Притом, Groovy задржава предност у концизности за једноставне конфигурације.

Перформансе изградње на KTS-у и Groovy-ју су практично идентичне након компилације скрипти. KTS скрипте се компилирају дуже при првом покретању или након чишћења кеша, али наредне изградње раде истом брзином као Groovy скрипте. Gradle кешира компилиране KTS скрипте у build директоријуму, па се поновна компилација дешава само при промени скрипте.

КарактеристикаGradle KTSGroovy DSL
ТипизирањеСтатичко, проверава се при компилацијиДинамичко, проверава се у runtime-у
IDE подршкаАутоматско довршавање + навигација + рефакторисањеОграничена (динамичко типизирање)
Синтакса блоковаЛамбде са receiver-ом (типизиране)Closure (нетипизиран)
Додељивање својставаПреко = (compileSdk = 34)Без знака = (compileSdk 34)
Прва компилацијаСпорија (Kotlin компилација)Бржа (интерпретација)
Накнадне изградњеИсто (кеш скрипти)Исто

Избор између KTS-а и Groovy-ја у 2026. години је очигледан: за нове пројекте — KTS. Google, JetBrains и Gradle препоручују KTS за све нове пројекте. Groovy остаје релевантан за подршку legacy пројеката, где миграција није целисходна због обима конфигурација или специфичних додатака некомпатибилних са KTS-ом.

Примери кода: build-скрипте у KTS-у

Размотримо типичне конфигурационе блокове у KTS-у за Android, Kotlin Multiplatform и Compose Multiplatform. Android пројекат са KTS-ом захтева експлицитно навођење типова у конфигурацији buildTypes и productFlavors. Пример испод приказује конфигурацију апликације са два flavour-а.

kotlin
android {
    buildTypes {
        val release = getByName("release") {
            isMinifyEnabled = true
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
        getByName("debug") {
            applicationIdSuffix = ".debug"
        }
    }

    flavorDimensions += "version"
    productFlavors {
        register("demo") {
            dimension = "version"
            versionNameSuffix = "-demo"
        }
        register("full") {
            dimension = "version"
        }
    }
}

За Kotlin Multiplatform KTS је обавезан — Groovy не подржава исправно конфигурацију мултиплатформских модула. Конфигурација KMM модула укључује подешавање циљних платформи и source set-ова. Пример испод приказује конфигурацију shared модула са iOS и Android.

kotlin
kotlin {
    androidTarget {
        compilations.all {
            kotlinOptions {
                jvmTarget = "17"
            }
        }
    }

    listOf(
        iosX64(),
        iosArm64(),
        iosSimulatorArm64()
    ).forEach { iosTarget ->
        iosTarget.binaries.framework {
            baseName = "Shared"
            isStatic = true
        }
    }

    sourceSets {
        commonMain.dependencies {
            implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0")
        }
        androidMain.dependencies {
            implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0")
        }
    }
}

Помоћне функције и прилагођени задаци

KTS омогућава декларисање помоћних Kotlin функција унутар build-скрипте. Ово је посебно згодно за понављајуће конфигурације, као што су signing configs или управљање верзијама. Захваљујући статичком типизирању, такве функције се могу позивати са провером параметара у фази компилације, што искључује грешке у signing конфигурацијама пре објављивања у Google Play-у.

kotlin
fun Project.configureSigning() {
    android {
        signingConfigs {
            register("release") {
                storeFile = file("release.keystore")
                storePassword = System.getenv("KEYSTORE_PASSWORD")
                keyAlias = System.getenv("KEY_ALIAS")
                keyPassword = System.getenv("KEY_PASSWORD")
            }
        }
    }
}

// Коришћење у build.gradle.kts
configureSigning()

Миграција са Groovy на KTS

Миграција са Groovy на KTS — процес који се може изводити постепено. Gradle подржава мешовите пројекте, где део модула користи Groovy (build.gradle), а део — KTS (build.gradle.kts). settings.gradle и root build.gradle могу бити преведени први, јер не зависе од додатака модула. Google препоручује почетак миграције са settings.gradle.kts, затим root build.gradle.kts, и тек онда модуле.

Главни кораци миграције укључују: замену синтаксе closures ламбдама, додавање знакова = за додељивање, замену стринг кључева типизираним константама и експлицитно типизирање променљивих. Android Studio пружа аутоматску конверзију Groovy → KTS за једноставне блокове, али сложене конфигурације са угнежђеним closures захтевају ручно преписивање.

Groovy (било)KTS (постало)
compileSdk 34compileSdk = 34
buildTypes { release { ... } }buildTypes { getByName(„release”) { ... } }
implementation 'com.android.x:y:1.0'implementation(„com.android.x:y:1.0”)
flavorDimensions „version”flavorDimensions += „version”
productFlavors { demo { ... } }productFlavors { register(„demo”) { ... } }
def vsn = „1.0”val vsn = „1.0”

Типични проблеми при миграцији укључују имплицитне позиве метода Groovy-ја који немају Kotlin еквивалент и додатке који не пружају Kotlin-пријатељски API. За решавање првог проблема, Gradle пружа компатибилност кроз withGroovyBuilder — механизам који омогућава позивање Groovy метода из KTS-а. За други — потребно је сачекати ажурирање додатка или га користити у Groovy модулу до потпуне миграције.

Gradle KTS за Kotlin Multiplatform

Kotlin Multiplatform — главни пројекат у којем је KTS обавезан захтев. Додатак kotlin multiplatform пружа проширења за конфигурацију циљних платформи, source set-ова и framework бинарних датотека, која су доступна само кроз Kotlin DSL. Groovy не подржава исправно мултиплатформску конфигурацију, па KMM пројекти користе искључиво KTS.

Конфигурација KMM-а у KTS-у укључује нестандардне блокове: kotlin.target за навођење платформи, kotlin.sourceSets за организацију заједничког и платформског кода, kotlin.cocoapods за интеграцију са CocoaPods-ом и kotlin.jvmToolchain за избор JDK-а. Сваки блок има строго типизиран API са аутоматским довршавањем у Android Studio-у, што је посебно вредно за сложену конфигурацију KMM пројекта са више платформи.

kotlin
kotlin {
    iosArm64()
    iosSimulatorArm64()
    iosX64()

    cocoapods {
        summary = "Shared Kotlin module"
        homepage = "https://itsectr.com"
        framework {
            baseName = "Shared"
            isStatic = false
        }
        pod("Alamofire") {
            version = "5.9"
        }
    }
}

Захваљујући статичком типизирању KTS-а, KMM програмери добијају аутоматско довршавање за source set-ове и зависности, проверу типова framework конфигурације и могућност рефакторисања платформских имена. KTS такође поједностављује отклањање грешака: грешке у KMM конфигурацији приказују се као Kotlin компилационе грешке са разумљивим порукама, за разлику од Groovy-ја, где су грешке могле бити скривене до извршавања Gradle задатка.

Често постављана питања

Да ли је обавезан прелазак са Groovy на KTS?

Обавезан за Kotlin Multiplatform пројекте. За Android и серверске пројекте, Groovy остаје подржан, али Google и Gradle препоручују KTS за нове пројекте због статичког типизирања и боље IDE подршке.

Могу ли се користити Groovy и KTS у истом пројекту?

Да, Gradle подржава мешовите пројекте. Сваки модул може користити свој DSL. settings.gradle или settings.gradle.kts одређују основни DSL, али модули су независни. Ово омогућава постепену миграцију.

Зашто се KTS компилира дуже од Groovy-ја?

KTS захтева компилацију Kotlin у бајт-код пре извршавања. Ово захтева додатно време при првом покретању или након чишћења кеша. Све наредне изградње користе кеширане класе брзином упоредивом са Groovy-јем.

Који додаци нису компатибилни са KTS-ом?

Већина модерних додатака је компатибилна. Проблеми настају са застарелим додацима који користе Groovy-специфичан API или Closure без Kotlin аналога. За такве додатке користите withGroovyBuilder() или оставите модул на Groovy-ју.

Како KTS утиче на перформансе изградње?

Након почетне компилације скрипти, перформансе изградње су идентичне Groovy-ју. Gradle кешира компилиране KTS скрипте, а поновна компилација се дешава само при њиховој промени. Разлика у брзини изградње модула је неприметна.

Закључци

  • Gradle KTS — Kotlin DSL за build-скрипте Gradle-а, који пружа статичко типизирање и аутоматско довршавање у IDE-у.
  • Статичко типизирање омогућава откривање грешака конфигурације у фази компилације, а не при извршавању задатака.
  • Синтакса KTS-а се разликује од Groovy-ја: обавезан знак =, функција getByName, register за flavour-е.
  • Kotlin Multiplatform захтева KTS — Groovy не подржава исправно мултиплатформску конфигурацију.
  • Миграција са Groovy на KTS може бити фазнa захваљујући подршци за мешовите пројекте.
  • Перформансе изградње на KTS-у су идентичне Groovy-ју након почетне компилације скрипти.
  • Користите KTS за све нове пројекте, посебно за KMM и Android са AGP 7.0+.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође