Belajar Spring Boot - Tooling Modern & Build Automation
Episode 19 of 24

Belajar Spring Boot - Tooling Modern & Build Automation

Episode ini membahas alat dan proses build: perbandingan Maven vs Gradle Kotlin DSL, Spring Boot plugin dan dependency management BOM, live reload dengan Spring DevTools, serta reproducible builds dan multi-module project.

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

Pendahuluan

Build tool adalah asisten diam yang menjalankan seluruh pipeline pengembangan kalian. Memilih dan memahami tool ini dengan benar membuat tim lebih produktif dan artefak lebih dapat diandalkan. Episode 19 membahas tooling modern dan build automation.

Kalian akan membandingkan Maven dan Gradle, memahami Spring Boot plugin serta dependency management BOM, mempercepat iterasi dengan Spring DevTools, dan membangun multi-module project dengan build yang reproducible.

Maven vs Gradle Kotlin DSL

Maven: Simpel dan Standar

Maven memakai pom.xml berbasis XML dengan siklus hidup yang jelas — clean, compile, test, package, install. Keunggulannya: konsisten, banyak dokumentasi, dan menjadi default Spring Initializr. Struktur proyek Maven tidak banyak berubah sejak lama.

Plugin Spring Boot di pom.xml
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

Plugin spring-boot-maven-plugin menghasilkan jar executable — kunci dari ./mvnw spring-boot:run dan java -jar.

Gradle dengan Kotlin DSL

Gradle memakai script — build.gradle.kts dengan Kotlin DSL — yang lebih ekspresif dan fleksibel. Build cache dan incremental build-nya sangat cepat untuk project besar:

Plugin Spring Boot di build.gradle.kts
plugins {
    id("org.springframework.boot") version "3.4.1"
    id("io.spring.dependency-management") version "1.1.7"
    java
}
 
group = "com.example"
version = "0.0.1-SNAPSHOT"
 
repositories { mavenCentral() }
 
dependencies {
    implementation("org.springframework.boot:spring-boot-starter-web")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
}

Perhatikan: versi dependency tidak perlu ditulis manual. Plugin io.spring.dependency-management menerapkan BOM Spring Boot sehingga seluruh versi library disepakati otomatis.

Spring Boot Plugin dan Dependency Management BOM

Apa itu BOM

BOM (Bill of Materials) adalah file yang mendeklarasikan versi semua library Spring di satu tempat. Spring Boot menerbitkan BOM untuk setiap rilis — misalnya spring-boot-dependencies:3.4.1. Saat kalian upgrade versi Spring Boot, seluruh versi library ikut terkoordinasi.

Di Maven, BOM diimpik lewat dependency management:

Dependency management dengan parent
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.4.1</version>
</parent>

Starter parent ini mengimpor BOM Spring Boot dan menyediakan konfigurasi plugin default. Inilah alasan kalian tidak perlu menulis nomor versi untuk starter dependency — konsistensi versi dijamin oleh BOM.

Memakai Plugin untuk Packaging

Plugin Spring Boot juga menawarkan goal tambahan: spring-boot:run untuk menjalankan aplikasi, spring-boot:repackage untuk membuat jar executable, dan spring-boot:build-image untuk membangun image OCI. Contoh membangun image container langsung dari Maven:

Build image dengan plugin
./mvnw spring-boot:build-image -Dspring-boot.build-image.imageName=belajar:1.0

Perintah ./mvnw spring-boot:build-image -Dspring-boot.build-image.imageName=belajar:1.0 menghasilkan container image dengan buildpack — tanpa menulis Dockerfile. Pendekatan ini juga akan kita pakai di episode 20.

Live Reload dengan Spring DevTools

Dependency DevTools

Spring DevTools mempercepat iterasi development. Tambahkan dependency:

Dependency Spring DevTools
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
</dependency>

DevTools menyediakan restart otomatis saat class berubah: aplikasi di-restart dengan classloader baru tanpa full restart JVM — jauh lebih cepat. Perubahan di application.yml juga langsung diterapkan. Pastikan dependency ini tidak ikut ke produksi — scope runtime dan skrip packaging menanganinya.

Fitur Lain DevTools

  • LiveReload — browser di-refresh otomatis saat resource statis berubah.
  • Property default development — template caching dimatikan, halaman error lebih detail.
  • Konfigurasi global — profile development yang otomatis aktif saat menjalankan aplikasi dari IDE.

Fitur-fitur ini membuat loop tulis-ubah-uji menjadi jauh lebih cepat. Di CI/CD, pastikan DevTools tidak memperlambat build.

Reproducible Build dan Multi-Module Project

Reproducible Builds

Reproducible build menghasilkan artefak yang identik setiap kali dibangun dari source yang sama — penting untuk kepercayaan dan audit supply chain. Beberapa langkah di Maven:

Pengaturan reproducible build
project.build.outputTimestamp=2026-08-10T00:00:00Z

Menetapkan outputTimestamp menghilangkan timestamp yang berubah-ubah dari jar, sehingga artefak menjadi deterministik. Verifikasi dengan ./mvnw verify dua kali dan bandingkan checksum artefaknya.

Multi-Module Project

Untuk aplikasi besar, pecah project menjadi modul. Di Maven, deklarasikan modul di root pom.xml:

Deklarasi modul Maven
<modules>
    <module>domain</module>
    <module>application</module>
    <module>infrastructure</module>
    <module>web</module>
</modules>

Struktur ini memungkinkan setiap modul di-compile dan diuji secara independen, sementara root project membangun semuanya secara berurutan. Multi-module adalah fondasi praktis dari modular architecture yang dibahas di episode 18.

Penutup

Episode 19 membekali kalian dengan tooling modern: perbandingan Maven dan Gradle Kotlin DSL, peran Spring Boot plugin dan BOM dalam manajemen dependency, akselerasi development dengan Spring DevTools, serta reproducible build dan multi-module project.

Inti yang harus dibawa pulang:

  • Maven konsisten dan standar; Gradle fleksibel dan cepat untuk project besar.
  • BOM Spring Boot menyatukan versi semua library di satu tempat.
  • spring-boot-maven-plugin menghasilkan jar executable dan image container.
  • Spring DevTools mengaktifkan restart otomatis dan live reload di development.
  • project.build.outputTimestamp membuat build reproducible.
  • Multi-module project memecah codebase besar menjadi unit yang terkelola.

Di episode 20 selanjutnya kita akan membahas cloud-native deployment — optimasi Dockerfile dengan multi-stage build, Spring Boot Native Image dengan GraalVM dan AOT, integrasi dengan Kubernetes dan readiness probe, serta deployment ke AWS, GCP, Azure, dan platform PaaS.

Belajar Spring Boot - Tooling Modern & Build Automation | Belajar Spring Boot