99 Ngày Java — Ngày 87: Gradle
Gradle mô tả build bằng code thay vì XML: file build.gradle.kts là một script Kotlin. Nó xây một đồ thị task, chỉ chạy lại phần có đầu vào thay đổi và có thể lấy kết quả từ cache. Đổi lại, build linh hoạt hơn cũng dễ trở nên khó đoán hơn nếu không giữ kỷ luật.

1. build.gradle.kts tối thiểu
Plugin java thêm các task biên dịch, test và đóng gói; plugin application thêm task run. Khối toolchain yêu cầu đúng JDK 21 để biên dịch, và Gradle có thể tự tìm hoặc tải JDK đó, không phụ thuộc JAVA_HOME của từng máy. File settings.gradle.kts đặt tên dự án và liệt kê các module con.
plugins {
java
application
}
group = "vn.motdev"
version = "1.0.0"
java {
toolchain { languageVersion = JavaLanguageVersion.of(21) }
}
repositories { mavenCentral() }
application { mainClass = "vn.motdev.orders.Main" }2. Cấu hình phụ thuộc
Gradle dùng configuration thay cho scope của Maven. implementation là lựa chọn mặc định: thư viện có trên classpath của bạn nhưng không lộ ra cho module dùng bạn. api, có trong plugin java-library, mới lộ ra bên ngoài. compileOnly tương đương provided, runtimeOnly tương đương runtime. Dùng implementation thay vì api giúp các module phía sau không phải biên dịch lại khi bạn đổi thư viện nội bộ.
dependencies {
testImplementation(platform("org.junit:junit-bom:5.11.3")) // BOM
implementation("com.fasterxml.jackson.core:jackson-databind:2.18.1")
runtimeOnly("org.postgresql:postgresql:42.7.4")
testImplementation("org.junit.jupiter:junit-jupiter")
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
}
tasks.test { useJUnitPlatform() }3. Task, build tăng dần và cache
Mọi việc trong Gradle là task có đầu vào và đầu ra được khai báo. Nếu đầu vào không đổi, task được đánh dấu UP-TO-DATE và bỏ qua; nếu bật build cache, kết quả còn lấy lại được từ lần build khác hoặc máy khác. Daemon giữ JVM chạy nền nên các lần build sau khởi động nhanh. Task tự viết phải khai báo đầu vào và đầu ra, nếu không Gradle không thể bỏ qua nó.
./gradlew build # compile, test, assemble
./gradlew test --tests "*OrderServiceTest"
./gradlew dependencies --configuration runtimeClasspath
./gradlew build --scan # where did the time go?4. Gradle hay Maven
Maven là cấu hình khai báo: ít tự do, nhưng dự án nào cũng giống nhau. Gradle là code: nhanh hơn trên dự án lớn nhờ build tăng dần và cache, và tùy biến được mọi thứ. Cả hai dùng chung kho Maven Central và đều được Spring Boot hỗ trợ đầy đủ. Android và phần lớn dự án Kotlin dùng Gradle; nhiều doanh nghiệp Java vẫn chuẩn hóa trên Maven.
Luôn commit Gradle Wrapper và gọi ./gradlew, không gọi gradle cài trên máy.
Giữ logic build ngắn; logic dài đưa vào convention plugin trong buildSrc hoặc build-logic.
Gom phiên bản vào version catalog gradle/libs.versions.toml.
Chọn theo đội và hệ sinh thái đang có, không theo benchmark của người khác.
Gradle cho tốc độ và tự do; cái giá là phải tự giữ build đơn giản. Ngày 88 dùng công cụ build đó để chạy unit test với JUnit 5.
Tài liệu đối chiếu
https://docs.gradle.org/current/userguide/building_java_projects.html
https://docs.gradle.org/current/userguide/declaring_dependencies_basics.html
Site Admin
Engineer and writer. Building things with TypeScript and distributed systems.
Bình luận (0)
Bạn cần đăng nhập bằng Google để bình luận.
Hãy là người bình luận đầu tiên.


