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"):
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:
| Task | Tujuan |
|---|---|
compileKotlin | Kompilasi src/main/kotlin/*.kt → build/classes/kotlin/main |
compileTestKotlin | Kompilasi src/test/kotlin/*.kt → build/classes/kotlin/test |
kotlinSourcesJar | Membundle .kt source ke JAR (untuk publikasi) |
inspectClassesForKotlinIC | Memeriksa 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:
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:
jvmToolchain(21): menetapkan versi JDK untuk kompilasi dan runtime. Tanpa ini, Gradle memakai JDK yang dipakai untuk menjalankan daemon — bisa berbeda antar developer.jvmTarget: target bytecode (mirip-jvm-targetpadakotlinc). BisaJVM_1_8,JVM_11,JVM_17,JVM_21.freeCompilerArgs.add(...): argumen tambahan yang diteruskan langsung kekotlinc. Berguna untuk opt-in fitur eksperimental (-opt-in=...) atau pemeriksaan nullability strict.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:
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.
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:
=== 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:
- Daftar task: setiap baris menjelaskan task yang otomatis tersedia setelah plugin diterapkan. Pembaca dapat memverifikasi dengan menjalankan
./gradlew tasks --group kotlindi proyek mereka sendiri. - Konfigurasi
jvmToolchain(21): menetapkan JDK yang dipakai. Tanpa ini, build dapat menghasilkan bytecode versi berbeda di tiap mesin developer. KotlinVersion.CURRENT: mencetak versi Kotlin runtime yang dipakai saat program dijalankan. Output ini cocok dengan versi plugin2.0.21dipluginsblock.- Catatan plugin Java: plugin
kotlin("jvm")otomatis menerapkanjavaplugin. Ini menjelaskan mengapa task sepertijar,javadoc, dancompileJavatetap tersedia tanpa deklarasi eksplisit.
Catatan tentang KAPT dan KSP #
Untuk pemrosesan anotasi (Dagger, Room, Moshi), dua opsi tersedia:
- KAPT (
kotlin("kapt")): kompatibel denganjavacannotation processor lama. Lambat karena menghasilkan stub Java. - KSP (
com.google.devtools.ksp): lebih cepat dan native Kotlin. Direkomendasikan untuk library yang mendukung.
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.