Belajar Groovy - Integrasi dengan Java & Library
Episode 10 of 23

Belajar Groovy - Integrasi dengan Java & Library

Episode ini membahas interoperabilitas Groovy dan Java: memakai library Java dari Groovy, mengimpor package Java, mengakses enum, dan memanggil method Java. Kalian juga belajar menjalankan Groovy dalam aplikasi Java dan sebaliknya dengan GroovyShell.

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

Pendahuluan

Kekuatan Groovy tidak lepas dari ekosistem Java. Karena keduanya hidup di JVM, Groovy bisa memakai jutaan library Java yang sudah ada — dan aplikasi Java bisa memanfaatkan fleksibilitas Groovy untuk scripting.

Episode 10 membahas penggunaan library Java dari Groovy, import package Java, akses enum, pemanggilan method Java, serta menjalankan Groovy dalam aplikasi Java dan sebaliknya. Kalian akan melihat integrasi dua arah yang mulus tanpa adapter.

Memakai Library Java dari Groovy

Import Package Java

Import di Groovy identik dengan Java. Perbedaannya, Groovy juga punya shorthand untuk import static dan wildcard:

Import package Java
import java.util.concurrent.TimeUnit
import static java.lang.Math.*
 
def lamaMenunggu = TimeUnit.SECONDS.toMillis(30)
println "30 detik = ${lamaMenunggu} ms"
println "Nilai maksimal: ${max(10, 20)}"

import java.util.concurrent.TimeUnit mengimpor class Java biasa, dan import static java.lang.Math.* mengimpor semua static member sekaligus. max(10, 20) langsung bisa dipanggil tanpa prefiks Math.

@Grab untuk Dependency

Untuk memakai library Java eksternal, Groovy menyediakan @Grab yang mendownload dependency dari Maven Central saat script dijalankan:

Menggunakan library eksternal
@Grab("com.google.code.gson:gson:2.10.1")
import com.google.gson.Gson
 
def gson = new Gson()
def json = gson.toJson([nama: "Arman", umur: 25])
println json

@Grab("com.google.code.gson:gson:2.10.1") mengambil Gson dari Maven Central secara otomatis. new Gson().toJson(...) mengubah map Groovy menjadi JSON — contoh integrasi dengan library Java ternama tanpa setup build.

Mengakses Enum dan Method Java

Enum dan Switch

Mengakses enum Java
import java.time.DayOfWeek
 
def hari = DayOfWeek.SATURDAY
 
switch (hari) {
    case DayOfWeek.SATURDAY:
    case DayOfWeek.SUNDAY:
        println "Akhir pekan!"
        break
    default:
        println "Hari kerja"
}
 
println DayOfWeek.values().collect { it.name() }.join(", ")

import java.time.DayOfWeek mengimpor enum Java, dan case DayOfWeek.SATURDAY membandingkannya dalam switch. DayOfWeek.values().collect { it.name() } mengubah seluruh nilai enum menjadi list string.

Memanggil Method Java

Memanggil method Java
def text = "  Groovy Dan Java  "
println text.trim()
println text.toUpperCase().split(" ").toList()
 
def map = new java.util.HashMap()
map.put("kunci", "nilai")
println map.get("kunci")

text.toUpperCase().split(" ").toList() memanggil method Java toUpperCase dan split, lalu mengonversi hasil array menjadi list Groovy. new java.util.HashMap() membuat objek Java murni, dan seluruh method-nya bisa dipanggil tanpa masalah.

Menjalankan Groovy dari Java

GroovyShell di Aplikasi Java

Untuk aplikasi Java yang ingin mengevaluasi script dinamis, Groovy menyediakan GroovyShell. Tambahkan dependency groovy-4.0.24 ke classpath project:

Menjalankan Java dengan groovy di classpath
java -cp groovy-4.0.24.jar:. Main
GroovyShell dari Java
import groovy.lang.Binding;
import groovy.lang.GroovyShell;
 
public class Main {
    public static void main(String[] args) {
        Binding binding = new Binding();
        binding.setVariable("nama", "Arman");
        GroovyShell shell = new GroovyShell(binding);
        Object hasil = shell.evaluate("println \"Halo, ${nama}\"");
    }
}

java -cp groovy-4.0.24.jar:. Main memasukkan Groovy jar ke classpath, dan new GroovyShell(binding) mengevaluasi script yang memakai variabel dari binding. Pola ini sering dipakai untuk engine aturan atau plugin yang bisa diekstensi tanpa rekompilasi.

GroovyClassLoader untuk Class

Memuat class Groovy dari Java
import groovy.lang.GroovyClassLoader;
 
GroovyClassLoader loader = new GroovyClassLoader(Main.class.getClassLoader());
Class<?> cls = loader.parseClass("class Halo { String sapa() { 'hi' } }");
Object obj = cls.getDeclaredConstructor().newInstance();

loader.parseClass(...) mengkompilasi string menjadi class Groovy, lalu getDeclaredConstructor().newInstance() membuat instance-nya. Class hasil parse bisa dipakai seperti class Java biasa melalui reflection.

Menjalankan Java dari Groovy

Memakai Class Java dalam Script

Memakai class Java dari Groovy
class Utils {
    static String sambung(String a, String b) {
        return a + b;
    }
}
 
def hasil = Utils.sambung("Groovy", "Java")
println hasil
 
def u = new Utils()
println u.class.name

Utils.sambung("Groovy", "Java") memanggil static method class Groovy, dan u.class.name memeriksa class aktualnya. Karena semua class Groovy adalah GroovyObject, aplikasi Java bisa memakainya lewat interface yang disepakati.

Shared Classpath

Kunci interop mulus adalah classpath bersama. Saat script Groovy berjalan di project Java, gunakan opsi untuk memakai classpath project:

Menjalankan Groovy dengan classpath project
groovy -cp "build/classes/java/main:lib/*" script.groovy

groovy -cp "build/classes/java/main:lib/*" script.groovy menambahkan class hasil kompilasi Java dan library project ke classpath script. Dengan ini, Groovy bisa memakai class business logic Java yang sama dengan aplikasi utama.

Panduan Praktis Interop

Pilihan Pola Integrasi

Tiga pola yang bisa kalian pilih sesuai kebutuhan:

  • Script mandiri: @Grab untuk dependency, tanpa project.
  • Class shared: class Groovy dikompilasi bersama project Java untuk performa dan type safety.
  • Runtime scripting: GroovyShell untuk plugin, aturan, atau konfigurasi dinamis.

Pilih pola pertama untuk tooling cepat, pola kedua untuk aplikasi inti, dan pola ketiga untuk bagian yang harus fleksibel.

Penutup

Episode 10 menunjukkan betapa mulusnya integrasi Groovy dan Java: import dan pemanggilan library Java berjalan langsung, @Grab mendownload dependency untuk script mandiri, enum dan method Java diakses tanpa adaptasi, dan GroovyShell membuka scripting dinamis dari aplikasi Java.

Inti yang harus dibawa pulang:

  • Import Java di Groovy identik dengan Java, plus shorthand static import.
  • @Grab mendownload dependency dari Maven Central saat runtime.
  • Enum Java bisa dipakai di switch dan di-iterasi seperti collection.
  • GroovyShell mengevaluasi script dinamis dari aplikasi Java.
  • GroovyClassLoader mengkompilasi class Groovy dari Java.
  • Classpath bersama memungkinkan dua arah interop tanpa adapter.

Di episode 11 selanjutnya kita akan membahas testing dan quality — unit testing dengan Spock dan JUnit, mocking, data-driven tests, behavior-driven syntax, serta static type checking dan linting untuk kode Groovy.