Xây dựng dự án Java bằng Gradle

Bài viết này sẽ cung cấp cho người đọc cách xây dựng 1 dự án Java và sử dụng công cụ Gradle để biên dịch. Yêu cầu trước khi tham khảo bài đọc này bao gồm những thông tin sau:

  • đã cài đặt Eclipse.
  • đã cà đặt JDK 1.6 hoặc mới hơn.
  • đã tạo dự án Java bằng Eclipse (đường dẫn tời thư mục dự án PROJECT_HOME).

Sau đây, là các bước để tiến hành xây dựng dự án Java bằng Gradle.

Để cài đặt gradle, bạn cần tải và giải nén mã nguồn từ kho chứa git với đường dẫn tải file nến như sau:

https://github.com/spring-guides/gs-gradle/archive/master.zip

Giải nén thư mục gradle, sử dụng cửa sổ lệnh rồi thay đổi thư mục đến initial:

cd gs-gradle/initial

Tại folder này, bạn thự hiện lệnh sau để kiếm tra việc cài đặt Gradle:

gradle

Nếu Gradle đã được cài đặt thành công, bạn sẽ nhận được những thông báo như sau tại cửa sổ lệnh:

:help

Welcome to Gradle 2.3.

To run a build, run gradle <task> ...

To see a list of available tasks, run gradle tasks

To see a list of command-line options, run gradle --help

BUILD SUCCESSFUL

Total time: 2.675 secs

Như vậy, bạn đã cài đặt xong Gradle.

Để kiếm tra những gì Gradle có thể thực hiện, bạn cần tiến hàn như sau:

Trước khi tạo file build.gradle cho dự án Java bạn muốn xây dựng, bạn có thể liệt kê các task đang có sẵn trên gradle với lệnh sau:

gradle tasks

Bạn sẽ nhìn thấy các task đang có sẵn (bạn cần chắc chắn rằng file build.gradle chưa được tạo). Thông báo trả về sẽ có nội dung như sau:

:tasks

== All tasks runnable from root project

== Build Setup tasks
setupBuild - Initializes a new Gradle build. [incubating]

== Help tasks
dependencies - Displays all dependencies declared in root project 'gs-gradle'.
dependencyInsight - Displays the insight into a specific dependency in root project 'gs-gradle'.
help - Displays a help message
projects - Displays the sub-projects of root project 'gs-gradle'.
properties - Displays the properties of root project 'gs-gradle'.
tasks - Displays the tasks runnable from root project 'gs-gradle'.

To see all tasks and more detail, run with --all.

BUILD SUCCESSFUL

Total time: 3.077 secs

Mặc dù các tasks này là có sẵn nhưng chúng sẽ không có nhiều giá trị nếu không thực hiện cầu hình dự án Java theo cấu hình Gradle. Danh sách tasks thường không cố định và có thể được thêm vào phụ thuộc vào việc tạo thêm các plugins trong file build.gradle, vì vậy bạn sẽ không muốn chạy lại câu lệnh gradle tasks để biết được những tasks nào đang có sẵn.

Việc tiếp theo, bạn cần thạo file build.gradle trong thư mục dự án Java. File này sẽ có đường dẫn như sau:

PROJECT_HOME/build.gradle

Tại thư mục dự án, tạo các file java tương ứng với nội dung như sau: đường dẫn:

src/main/java/hello/HelloWorld.java

tên tệp HelloWord.java package hello;

public class HelloWorld {
  public static void main(String[] args) {
    Greeter greeter = new Greeter();
    System.out.println(greeter.sayHello());
  }
}

đường dẫn:

src/main/java/hello/Greeter.java

tên tệp Greeter.java

package hello;

public class Greeter {
  public String sayHello() {
    return "Hello world!";
  }
}

Để cầu hình gradle xây dựng 1 dự án Java, bạn cần thêm plugin Java cho gradle bằng cách thêm dòng sau vào file gradle.build:

apply plugin: 'java'

Việc này khá đơn giản nhưng nó lại mang một ý nghĩa rất lớn cho quá trình xây dựng một dự án Java với Gradle. Bạn có thể chạy lại câu lênh gradle task để thấy các task mới được thêm vào, bao gồm việc xây dựng dự án, tạo JavaDoc và thực hiện việc kiểm tra.

Một câu lệnh nữa được sử dụng thường xuyên đó là:

gradle build

Câu lệnh này sẽ thực hiện việc biên dịch code Java thành những file class và nhúng chúng vào 1 file có định dạng JAR. Sau khi biên dịch thành công, sẽ trả về cho người dùng một thông báo dạng sau:

BUILD SUCCESSFUL

Việc biên dịch thành công sẽ tạo ra các thư mục con sau:

  • classes: chứa các file có định dạng class, được biên dịch từ các file có định dạng java
  • reports: chứa các báo cáo khi xây dựng (ví dụ như các báo báo kiểm tra).
  • libs: chứa các thư viện cần thiết cho dự án (thường là file JAR hoặc WAR).
  • depndency_cache: chứa các phụ thuộc được sử dụng khi xây dựng dự án.

Việc thêm các phụ thuộc sẽ đuợc thực hiện như sau. Giả sử, code java sẽ sử dụng thêm thư viện joda-time. Code file HelloWorld.java có được cập nhật như sau:

package hello;

import org.joda.time.LocalTime;

public class HelloWorld {
  public static void main(String[] args) {
    LocalTime currentTime = new LocalTime();
    System.out.println("The current local time is: " + currentTime);

    Greeter greeter = new Greeter();
    System.out.println(greeter.sayHello());
  }
}

Bạn có thể thấy, trong code đang sử dụng lớp LocalTime để in thời gian hiện tại. Nếu chưa thêm phụ thuộc này, khi chạy câu lệnh gradle build, hệ điều hành sẽ trả về thông báo lỗi cho người dùng. Để thêm phụ thuộc này, bạn cần khai bảo như sau trong file gradle.build:

repositories {
mavenCentral()
}

Từ khoá repositories chỉ ra rằng, một kho chứa thứ 3 được sủ dụng đó là kho chứ của Maven. Gradle được xây dựng để có thể ứng dụng các qui tắc và những tiện ích từ Maven. Nội dung file cấu hình sẽ được khai báo như sau:

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
    compile "joda-time:joda-time:2.2"
    testCompile "junit:junit:4.12"
}

Giá trị sourceCompatibility, targetCompatibility chỉ ra phiên bản JDK được sử dụng, ở đây là bản 1.8. Nội dung trong khối dependencies bao gồm:

  • compile: chỉ ra phụ thuộc cần có tại thời gian biên dịch, ở đây là thư viênj joda-time phiên bản 2.2
  • testCompile: khai báo các phụ thuộc sử dụng cho biên dịch và chạy các kiểm tra. Ngoài ra, bạn còn có thể thêm provideCompile để khai báo các phụ thuộc cho việc biên dịch dự án, nhưng nó sẽ được cung cấp tại thời điểm runetime bởi các container chạy code (ví dụ Servlet API).

Cuối cùng, bạn cần chỉ ra tên của JAR file được biên dịch ra:

    jar {
        baseName = 'gs-gradle'
        version =  '0.1.0'
    }

Trong khối jar này, bạn cần chỉ ra tên tệp tin JAR và phiên bản được biên dịch. File build.gradle đến lúc này sẽ có nội dung như sau:

apply plugin: 'java'

// tag::repositories[]
repositories {
    mavenCentral()
}
// end::repositories[]

// tag::jar[]
jar {
    baseName = 'gs-gradle'
    version =  '0.1.0'
}
// end::jar[]

// tag::dependencies[]
sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
    compile "joda-time:joda-time:2.2"
    testCompile "junit:junit:4.12"
}
// end::dependencies[]

// tag::wrapper[]
// end::wrapper[]

Tiếp theo, chạy lệnh sau để thực hiện việc xây dựng dự án:

gradle build

Sau khi chạy thành công, gradle sẽ biên dịch ra file gs-gradle-0.1.0.jar.

TỔNG KẾT:

Chúc mừng bạn đã tạo và xây dựng xong một dự án JAVA bằng Gradle. Việc xây dựng dự án này khá đơn giản nhưng nó sẽ giúp bạn có được nhứng kiến thưc cơ bản và có thể dễ dàng tiếp cận và làm việc với Gradle.