Gradle - Phá vỡ thế độc tôn

Với thế giới lập trình thì việc ra đời của #Gradle là điều tất yếu, và kẻ sinh sau thường là kẻ xuất chúng và khôn ngoan hơn. Gradle đã thừa kế tất cả các tính năng của #Maven, tự tạo dấu ấn riêng cho mình bằng quả tạo custom task và đặc biệt sau này #Android #Studio và #Intellij đã đưa #Gradle trở thành công cụ “native” cho #Kotlin thì gradle ngày càng trở nên bá đạo.

Tạo project với IntelliJ

Giả sử chúng ta cần tạo một dự án có tên crm (Customer Relationship Management) để quản khách hàng cho công ty.

Bước 1. Mở IntelliJ và chọn File -> New -> Project, chúng ta sẽ có popup:

Bước 2. Click next và chúng ta có:

Điền các thông tin như sau:

Name: crm
Location: workspace-java/crm
GroupId: com.tvd12
ArtifactId: crm
Version: 1.0.0

Click Finish và chúng ta sẽ có dự án được khởi tạo trên IntelliJ như thế này:

Tạo các module cho project

Thông thường, trong một dự án chúng ta sẽ thường có rất nhiều module khác nhau để common code hoặc đại diện cho các service sẽ được triển khai. Giả sử dự án crm của chúng ta sẽ bao gồm các service:

  1. Sales: dành cho đội sale
  2. Marketing: dành cho phòng marketing
  3. Report: là nơi xử lý các báo cáo hàng ngày hàng tuần, hàng tháng
  4. Customer service: là phòng dịch vụ và chăm sóc khách hàng

Sơ đồ thiết kế module của chúng ta sẽ thế này:

Bây giờ, chúng ta sẽ thay đổi crm project như sau.

Đầu tiên, xoá thư mục src của project và chúng ta sẽ có:

Bước 2. Mở file build.gradle và thay thế toàn bộ nội dung với:

plugins {
    id 'java'
    id 'idea'
}

allprojects {
    group 'com.tvd12.crm'
    version '1.0.0'

    repositories {
        mavenCentral()
    }
}

subprojects {
    apply plugin: 'java'
    apply plugin: 'idea'

    sourceCompatibility = 1.8

    repositories {
        mavenCentral()
    }

    dependencies {
        testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0'
        testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
    }

    test {
        useJUnitPlatform()
    }
}

Bước 3. Mở file settings.gradle và thay thế toàn bộ nội dung với:

include ':common'
include ':database'
include ':caching'
include ':service'
include ':sales'
include ':marketing'
include ':report'
include ':customer'
rootProject.name = 'crm'

Bước 4. Khởi tạo các module

Tạo module common bằng cách tạo thư mục common với file build.gradle như sau:

dependencies {
    implementation 'com.tvd12:ezyfox-util:1.1.4'
}

Tạo module database bằng cách tạo thư mục database với file build.gradle như sau:

dependencies {
    implementation project(':common')
}

Tạo module caching bằng cách tạo thư mục caching với file build.gradle như sau:

dependencies {
    implementation project(':common')
}

Tạo module service bằng cách tạo thư mục service với file build.gradle như sau:

dependencies {
    implementation project(':caching')
    implementation project(':database')
}

Tạo module sales bằng cách tạo thư mục sales với file build.gradle như sau:

dependencies {
    implementation project(':service')
}

Tạo module marketing bằng cách tạo thư mục marketing với file build.gradle như sau:

dependencies {
    implementation project(':service')
}

Tạo module report bằng cách tạo thư mục report với file build.gradle như sau:

dependencies {
    implementation project(':service')
}

Tạo module customer bằng cách tạo thư mục customer với file build.gradle như sau:

dependencies {
    implementation project(':service')
}

Bước 5. sync project crm và chúng ta sẽ có:

Vậy là chúng ta đã hoàn thành việc khởi tạo project crm với gradle trên intellij. Bạn có thể tải toàn bộ source code ở đây

Tạo Android project với Android Studio

Việc khởi tạo một Android project với Android Studio cũng tương tự như chúng ta khởi tạo project crm trên IntelliJ. Chỉ có một sự khác biệt nhỏ là android có thêm một khối setting như thế này:

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.tvd12.freechat"
        minSdkVersion 25
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

Và cấu trúc một project android sẽ thế này:

Bạn có thể tìm thấy source code đầy đủ của một android project tại freechat github

Tổng kết

Gradle là một công cụ mạnh mẽ để quản lý, xây dựng và triển khai mã nguồn. Với Intellij, Gradle đã trở thành công cụ được sử dụng rộng rãi trên toàn cầu. Đối với người mới bắt đầu, đối với Android, mình nghĩ gradle là một lựa chọn tốt.