Episode ini membahas tooling dan build automation Java: Maven versus Gradle Kotlin DSL, dependency management, plugin modern, build lifecycle, code formatting, linting, quality gates otomatis, skrip build reproducible, dan multi-module project.

Aplikasi modern butuh lebih dari sekadar compiler — butuh build tool yang mengelola dependency, menjalankan test, dan mengemas aplikasi. Episode 19 membahas tooling modern dan build automation: Maven, Gradle Kotlin DSL, build lifecycle, dan multi-module project.
Dua build tool mendominasi ekosistem Java: Maven yang deklaratif dan Gradle yang fleksibel. Kalian akan memahami kapan memakai yang mana, bagaimana mengotomasi build, dan bagaimana menjaga kualitas dengan code formatting dan quality gates.
Maven menggunakan file pom.xml berbasis XML dan konvensi yang ketat. Keunggulannya: keseragaman dan dukungan ekosistem terluas. Sebagian besar perusahaan enterprise memakai Maven.
Proyek Maven sederhana:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.aplikasi</groupId>
<artifactId>aplikasi-demo</artifactId>
<version>1.0.0</version>
<properties>
<maven.compiler.release>21</maven.compiler.release>
</properties>
</project>Gradle memakai script (Groovy atau Kotlin DSL) yang imperatif, dengan keunggulan kecepatan lewat incremental build dan fleksibilitas penuh:
plugins {
java
}
repositories {
mavenCentral()
}
dependencies {
testImplementation("org.junit.jupiter:junit-jupiter:5.10.3")
}
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}Pilih Maven untuk keseragaman dan ekosistem enterprise; pilih Gradle untuk proyek yang butuh kecepatan dan kustomisasi.
Kedua build tool menarik dependency dari repository seperti Maven Central. Kelola versi dengan rapi — hindari banyak versi library yang saling konflik:
mvn dependency:treemvn dependency:tree menampilkan seluruh dependency beserta versinya, berguna untuk mendeteksi konflik.
Maven dan Gradle punya lifecycle terstruktur. Pada Maven: validate, compile, test, package, verify, dan install. Gradle memiliki task seperti compileJava, test, dan build:
mvn clean verifymvn clean verify membersihkan hasil sebelumnya, mengompilasi, menjalankan test, dan memverifikasi kualitas.
Spotless menjaga konsistensi format kode menggunakan standar seperti Google Java Format:
plugins {
id("com.diffplug.spotless") version "6.25.0"
}
spotless {
java {
googleJavaFormat()
}
}Integrasikan linting dan static analysis (dari episode 17) ke dalam build agar menjadi quality gate — build gagal jika kualitas tidak memenuhi standar:
mvn verify
gradle checkgradle check menjalankan semua task verifikasi termasuk test dan static analysis.
Reproducible build menghasilkan artefak yang identik setiap kali dijalankan dengan input yang sama. Atur versi dependency secara eksplisit dan hindari snapshot yang berubah. Maven bisa menetapkan reproducible timestamp lewat project.build.outputTimestamp.
Proyek besar dipecah menjadi beberapa modul yang saling bergantung. Di Maven, gunakan parent POM:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.aplikasi</groupId>
<artifactId>aplikasi-parent</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<modules>
<module>core</module>
<module>web</module>
</modules>
</project>Bangun semua modul sekaligus:
mvn clean installmvn clean install membangun semua modul secara berurutan sesuai dependency-nya dan menginstall ke repository lokal.
Episode 19 membahas tooling modern: Maven yang deklaratif versus Gradle Kotlin DSL yang fleksibel, dependency management, build lifecycle, code formatting dengan Spotless, linting dan quality gates otomatis, build reproducible, serta multi-module project.
Inti yang harus dibawa pulang:
mvn dependency:tree membantu mendeteksi konflik dependency.Di episode 20 selanjutnya kita akan membahas microservices dan cloud-native Java — arsitektur microservices dan framework Java modern, pengenalan Spring Boot, Jakarta EE, Micronaut, Quarkus, dan Helidon, containerization Java dan native image GraalVM, serta integrasi service discovery, circuit breaker, dan observability. Saatnya membangun untuk cloud!