Plugin Kotlin Gradle adalah jembatan antara Gradle dan kotlinc. Plugin ini mendaftarkan task kompilasi, menambah source set src/main/kotlin, mengonfigurasi classpath dependensi, dan mengintegrasikan dengan plugin Java sehingga kode Kotlin dan Java dapat saling memanggil. Pada chapter ini kita akan membahas cara mendaftarkan plugin, task-task yang otomatis tersedia, serta konfigurasi compiler yang paling sering dipakai.

Mendaftarkan Plugin #

Blok plugins di build.gradle.kts adalah cara modern untuk menambahkan plugin. Sintaksis kotlin("jvm") adalah shorthand untuk id("org.jetbrains.kotlin.jvm"):

kotlin build.gradle.kts
plugins {
    kotlin("jvm") version "2.0.21"
    application  // plugin Java Application untuk exec
}

application {
    mainClass.set("com.example.HaloKt")
}

Setelah plugin diterapkan, Gradle akan mengunduh artefak plugin dari portal Gradle Plugin (plugins.gradle.org) saat pertama kali build dijalankan. Versi 2.0.21 di sini juga menentukan versi kotlin-stdlib yang otomatis ditambahkan ke dependensi.

Task yang Ditambahkan #

Plugin Kotlin Gradle menambah beberapa task berikut:

TaskTujuan
compileKotlinKompilasi src/main/kotlin/*.kt → build/classes/kotlin/main
compileTestKotlinKompilasi src/test/kotlin/*.kt → build/classes/kotlin/test
kotlinSourcesJarMembundle .kt source ke JAR (untuk publikasi)
inspectClassesForKotlinICMemeriksa class Java untuk kompilasi inkremental
kaptKotlin (jika plugin kapt aktif)Pemrosesan anotasi (mis. Dagger, Hibernate)

Konfigurasi Compiler #

Blok kotlin { ... } adalah pintu masuk untuk mengonfigurasi compiler. Opsi yang paling sering dipakai:

kotlin build.gradle.kts — konfigurasi kotlin
import org.jetbrains.kotlin.gradle.dsl.JvmTarget

kotlin {
    // Memilih JDK toolchain; Gradle akan memakai JDK 21 jika tersedia,
    // atau mengunduh via Foojay toolchain resolver
    jvmToolchain(21)

    compilerOptions {
        jvmTarget.set(JvmTarget.JVM_21)
        freeCompilerArgs.add("-Xjsr305=strict")
        freeCompilerArgs.add("-opt-in=kotlin.RequiresOptIn")
        allWarningsAsErrors.set(true)
    }
}

Mari kita bedah opsi-opsi di atas:

  1. jvmToolchain(21): menetapkan versi JDK untuk kompilasi dan runtime. Tanpa ini, Gradle memakai JDK yang dipakai untuk menjalankan daemon — bisa berbeda antar developer.
  2. jvmTarget: target bytecode (mirip -jvm-target pada kotlinc). Bisa JVM_1_8, JVM_11, JVM_17, JVM_21.
  3. freeCompilerArgs.add(...): argumen tambahan yang diteruskan langsung ke kotlinc. Berguna untuk opt-in fitur eksperimental (-opt-in=...) atau pemeriksaan nullability strict.
  4. allWarningsAsErrors: mengubah seluruh peringatan compiler menjadi galat. Berguna untuk menjaga kualitas kode di CI.

Multiplatform Plugin #

Selain kotlin("jvm"), terdapat plugin multiplatform yang mendukung target sekaligus:

kotlin build.gradle.kts — Kotlin Multiplatform
plugins {
    kotlin("multiplatform") version "2.0.21"
}

kotlin {
    jvm()
    js { browser() }
    linuxX64("native")

    sourceSets {
        val commonMain by getting {
            dependencies {
                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1")
            }
        }
    }
}

Plugin kotlin("multiplatform") menggantikan kotlin("jvm") untuk proyek yang menargetkan beberapa platform. Detail lebih lanjut tentang multiplatform berada di luar lingkup chapter ini.

Demonstrasi Plugin #

Kode berikut mencantumkan daftar task yang ditambahkan oleh plugin Kotlin Gradle serta konfigurasi yang umum dipakai sebagai referensi cepat.

kotlin
fun main() {
    println("=== Plugin Kotlin Gradle ===")
    println("plugin: kotlin(\"jvm\") version \"2.0.21\"")
    println()
    println("Task yang ditambah oleh plugin:")
    println("  compileKotlin        : kompilasi src/main/kotlin -> build/classes/kotlin/main")
    println("  compileTestKotlin    : kompilasi src/test/kotlin")
    println("  kotlinSourcesJar     : bundle source .kt ke JAR")
    println("  inspectClassesForKotlinIC : incremental compilation check")
    println()
    println("Konfigurasi yang umum:")
    println("  kotlin { jvmToolchain(21) }")
    println("  kotlin { compilerOptions { jvmTarget.set(JvmTarget.JVM_21) } }")
    println("  kotlin { compilerOptions { freeCompilerArgs.add(\"-Xjsr305=strict\") } }")
    println()
    println("Versi Kotlin yang dipakai: ${KotlinVersion.CURRENT}")
    println("Plugin kotlin(\"jvm\") menyertakan java plugin otomatis (compileJava, jar, dll.)")
}

Output yang Dihasilkan:

text
=== Plugin Kotlin Gradle ===
plugin: kotlin("jvm") version "2.0.21"

Task yang ditambah oleh plugin:
  compileKotlin        : kompilasi src/main/kotlin -> build/classes/kotlin/main
  compileTestKotlin    : kompilasi src/test/kotlin
  kotlinSourcesJar     : bundle source .kt ke JAR
  inspectClassesForKotlinIC : incremental compilation check

Konfigurasi yang umum:
  kotlin { jvmToolchain(21) }
  kotlin { compilerOptions { jvmTarget.set(JvmTarget.JVM_21) } }
  kotlin { compilerOptions { freeCompilerArgs.add("-Xjsr305=strict") } }

Versi Kotlin yang dipakai: 2.0.21
Plugin kotlin("jvm") menyertakan java plugin otomatis (compileJava, jar, dll.)

Mari kita telaah kode di atas:

  1. Daftar task: setiap baris menjelaskan task yang otomatis tersedia setelah plugin diterapkan. Pembaca dapat memverifikasi dengan menjalankan ./gradlew tasks --group kotlin di proyek mereka sendiri.
  2. Konfigurasi jvmToolchain(21): menetapkan JDK yang dipakai. Tanpa ini, build dapat menghasilkan bytecode versi berbeda di tiap mesin developer.
  3. KotlinVersion.CURRENT: mencetak versi Kotlin runtime yang dipakai saat program dijalankan. Output ini cocok dengan versi plugin 2.0.21 di plugins block.
  4. Catatan plugin Java: plugin kotlin("jvm") otomatis menerapkan java plugin. Ini menjelaskan mengapa task seperti jar, javadoc, dan compileJava tetap tersedia tanpa deklarasi eksplisit.

Catatan tentang KAPT dan KSP #

Untuk pemrosesan anotasi (Dagger, Room, Moshi), dua opsi tersedia:

  • KAPT (kotlin("kapt")): kompatibel dengan javac annotation processor lama. Lambat karena menghasilkan stub Java.
  • KSP (com.google.devtools.ksp): lebih cepat dan native Kotlin. Direkomendasikan untuk library yang mendukung.
kotlin build.gradle.kts — KSP
plugins {
    kotlin("jvm") version "2.0.21"
    id("com.google.devtools.ksp") version "2.0.21-1.0.28"
}

dependencies {
    ksp("com.google.dagger:hilt-compiler:2.51.1")
}

Referensi Lanjutan #

  • Gradle — panduan resmi Kotlin + Gradle yang menjelaskan penerapan Kotlin Gradle Plugin
  • Kotlin Gradle compiler options — daftar opsi kompilator Kotlin yang dapat diatur lewat Kotlin Gradle Plugin

Penutup #

Plugin Kotlin Gradle adalah penghubung utama antara Gradle dan ekosistem Kotlin. Pemahaman task yang ditambahkan serta opsi konfigurasi compiler menjadi bekal untuk membaca dan menulis build.gradle.kts. Pada chapter berikutnya kita akan membahas struktur direktori standar yang ditambahkan oleh plugin ini dan bagaimana mengelola proyek multi-modul.