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.

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 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.
<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 memakai script — build.gradle.kts dengan Kotlin DSL — yang lebih ekspresif dan fleksibel. Build cache dan incremental build-nya sangat cepat untuk project besar:
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.
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:
<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.
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:
./mvnw spring-boot:build-image -Dspring-boot.build-image.imageName=belajar:1.0Perintah ./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.
Spring DevTools mempercepat iterasi development. Tambahkan dependency:
<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-fitur ini membuat loop tulis-ubah-uji menjadi jauh lebih cepat. Di CI/CD, pastikan DevTools tidak memperlambat build.
Reproducible build menghasilkan artefak yang identik setiap kali dibangun dari source yang sama — penting untuk kepercayaan dan audit supply chain. Beberapa langkah di Maven:
project.build.outputTimestamp=2026-08-10T00:00:00ZMenetapkan outputTimestamp menghilangkan timestamp yang berubah-ubah dari jar, sehingga artefak menjadi deterministik. Verifikasi dengan ./mvnw verify dua kali dan bandingkan checksum artefaknya.
Untuk aplikasi besar, pecah project menjadi modul. Di Maven, deklarasikan modul di root pom.xml:
<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.
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:
spring-boot-maven-plugin menghasilkan jar executable dan image container.project.build.outputTimestamp membuat build reproducible.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.