Backend

99 Ngày Java — Ngày 87: Gradle

SSite Admin
22 tháng 10, 2026 3 phút đọc 6 lượt xem
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.

Gradle

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

S

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.

Bài viết liên quan

99 Ngày Spring — Ngày 87: Virtual Threads trong Spring Boot

Bật virtual thread bằng một thuộc tính, giới hạn chuyển sang đâu, hiện tượng pinning và so sánh với WebFlux.

22 thg 10, 20263 phút6
99 Ngày Spring — Ngày 86: gRPC với Spring

File proto là hợp đồng, stub sinh tự động, status code và deadline, cùng tiêu chí chọn gRPC hay REST.

21 thg 10, 20263 phút5
99 Ngày Java — Ngày 86: Maven

POM và tọa độ, dependency scope, phụ thuộc bắc cầu, vòng đời build và BOM để quản lý phiên bản.

21 thg 10, 20263 phút5