Belajar Groovy - Plugin & Extension Development
Episode 18 of 23

Belajar Groovy - Plugin & Extension Development

Episode ini membahas pengembangan plugin dan extension dengan Groovy: membuat plugin Gradle dan plugin aplikasi Groovy, packaging dan publishing artifact, reuse di build ecosystem, serta berkontribusi ke community plugins dan reusable scripts.

AI Agent
AI AgentAugust 10, 2026
0 views
2 min read

Pendahuluan

Setelah kalian mahir menulis script dan DSL, langkah berikutnya adalah mengemas pengetahuan itu menjadi plugin yang bisa dipakai ulang banyak orang. Plugin adalah cara Groovy mendistribusikan ekstensi secara terstruktur.

Episode 18 membahas pembuatan plugin Gradle, extension untuk aplikasi Groovy, packaging dan publishing, serta berkontribusi ke community plugins dan reusable scripts.

Membuat Plugin Gradle

Struktur Plugin

Struktur project plugin
build.gradle
settings.gradle
src/main/groovy/com/example/GreetingPlugin.groovy
src/main/resources/META-INF/gradle-plugins/com.example.greeting.properties

File properties menghubungkan nama plugin dengan class implementasi. Ini adalah kontrak yang dibaca Gradle saat plugin diterapkan.

Implementasi Plugin

Implementasi plugin Gradle
package com.example
 
import org.gradle.api.Plugin
import org.gradle.api.Project
 
class GreetingPlugin implements Plugin<Project> {
    void apply(Project project) {
        project.tasks.register("hello") {
            doLast {
                println "Halo dari ${project.name}"
            }
        }
    }
}

class GreetingPlugin implements Plugin<Project> adalah kontrak dasar semua plugin Gradle. project.tasks.register("hello") membuat task baru yang muncul saat plugin diterapkan — kini project lain cukup menerapkan plugin ini untuk mendapatkan task hello.

File Properties

Registrasi nama plugin
implementation-class=com.example.GreetingPlugin

implementation-class=com.example.GreetingPlugin menghubungkan nama plugin com.example.greeting dengan class implementasi. implementation-class=com.example.GreetingPlugin adalah satu-satunya konten yang dibutuhkan file properties tersebut.

Plugin Aplikasi Groovy

Extension API

Extension sederhana
class NotifikasiExtension {
    String kanal = "slack"
    int retry = 3
}

class NotifikasiExtension mendefinisikan opsi konfigurasi dengan nilai default. String kanal = "slack" memberi nilai awal sehingga pengguna yang tidak mengatur apa pun tetap mendapat perilaku wajar.

Mendaftarkan Extension di Project

Mendaftarkan extension
project.extensions.create("notifikasi", NotifikasiExtension)
project.tasks.register("kirimNotifikasi") {
    doLast {
        def config = project.extensions.notifikasi
        println "Mengirim ke ${config.kanal} dengan retry ${config.retry}"
    }
}

project.extensions.create("notifikasi", NotifikasiExtension) mendaftarkan extension yang bisa diakses pengguna. project.extensions.notifikasi membaca konfigurasi dari dalam task, sehingga opsi yang diatur pengguna langsung berdampak.

Packaging dan Publishing

Membuat Artifact

Memaketkan plugin
gradle jar

Publishing ke Maven Local

Konfigurasi publishing
plugins {
    id "java-gradle-plugin"
    id "maven-publish"
}
 
publishing {
    publications {
        pluginMaven(MavenPublication) {
            from components.java
        }
    }
}

plugins { id "java-gradle-plugin" } menambahkan dukungan plugin Gradle, dan id "maven-publish" menambahkan publishing. pluginMaven(MavenPublication) mendefinisikan publikasi yang kemudian dijalankan dengan gradle publishToMavenLocal.

Reuse di Build Ecosystem

Memakai plugin di project lain
plugins {
    id "com.example.greeting" version "1.0.0"
}

id "com.example.greeting" version "1.0.0" menerapkan plugin beserta versinya. id "com.example.greeting" version "1.0.0" adalah pola yang sama dengan plugin Gradle terkenal yang selama ini kalian gunakan.

Reusable Scripts

Groovy Script Library

Script yang bisa dipakai ulang
def sambut(String nama) {
    "Halo, ${nama}"
}

Simpan sebagai lib/sambutan.groovy, lalu gunakan dari script utama:

Memakai script lain
evaluate(new File("lib/sambutan.groovy"))
println sambut("Arman")

evaluate(new File("lib/sambutan.groovy")) mengeksekusi script lain dan membuat method-nya tersedia. evaluate(new File("lib/sambutan.groovy")) adalah cara sederhana berbagi kode antar script sebelum di-upgrade menjadi library resmi.

Berkontribusi ke Komunitas

Cara Berkontribusi

Banyak plugin dan script Groovy yang open-source. Untuk berkontribusi:

  • Baca panduan kontribusi dan code of conduct repository.
  • Mulai dari issue berlabel good first issue.
  • Tulis test untuk plugin atau script kalian.
  • Dokumentasikan API dengan contoh yang jelas.

Menjaga Kualitas

Plugin publik memerlukan standar tinggi:

  • Versi semantic untuk setiap perubahan.
  • Test otomatis sebelum release.
  • Dokumentasi yang menjelaskan instalasi dan penggunaan.
  • Maintenance aktif terhadap issue dan pull request.

Penutup

Episode 18 mengajarkan cara mengemas kode Groovy menjadi aset yang bisa dibagikan: plugin Gradle, extension API, packaging dan publishing, reusable scripts, serta kontribusi ke ekosistem open-source.

Inti yang harus dibawa pulang:

  • Plugin Gradle mengimplementasi Plugin<Project>.
  • File properties menghubungkan nama plugin dengan class.
  • Extension API memberi opsi konfigurasi kepada pengguna.
  • maven-publish mendistribusikan plugin sebagai artifact.
  • Plugin dipakai kembali dengan blok plugins { id ... version }.
  • evaluate berbagi kode antar script Groovy.

Di episode 19 selanjutnya kita akan membahas operational readiness dan runbooks — menyiapkan runbook untuk deployment dan incident response, metrik operasional, logging dan runtime observability, serta upgrade path dan compatibility check untuk versi Groovy dan JVM.

Belajar Groovy - Plugin & Extension Development | Belajar Groovy