You are on page 1of 3

Maven là một công cụ build tự động cho các ứng dụng Java (có thể cho các ngôn

ngữ khác) được phát triển bởi Apache Foundation. Nó xuất hiện lần đầu tiên trong dự án Jakarta Turbine với mục đích đơn giản hóa các quá trình build cho dự án này. Tiền thân của
Maven là Ant. Các công cụ build tương tự: Ant, Gradle (Java), sbt (Scala), Grunt, Gulp (JavaScript),...

Cài đặt Maven


Các bạn cài đặt Maven theo hướng dẫn tại đây.

Làm quen với Maven


Dưới đây là hai chức năng chính của Maven ta sẽ làm quen: * Tự động các quá trình build: biên dịch, kiểm thử, đóng gói, triển khai,... * Quản lý các phụ thuộc

Các bạn quan sát ví dụ dưới đây (ví dụ 1):

/**
*source: https://o7planning.org/vi/10131/huong-dan-su-dung-maven-cho-nguoi-moi-bat-dau
**/
import org.apache.commons.lang3.StringUtils; // thuộc thư viện common-lang3

public class CheckNumeric {


public static void main(String[] args) {
String text1 = "0123a4";
String text2 = "01234";

boolean result1 = StringUtils.isNumeric(text1);


boolean result2 = StringUtils.isNumeric(text2);

System.out.println(text1 + " is a numeric? " + result1);


System.out.println(text2 + " is a numeric? " + result2);
}
}

Ở ví dụ trên, lớp StringUtils là một lớp thuộc thư viện Apache Common-Lang3 và không thuộc bộ thư viện chuẩn JDK của Java cho nên các bạn cần khai báo classpath cho nó thì mới biên dịch được project.

Giả sử mình đã tải sẵn thư viện commons-lang3-3.10.jar và cấu trúc project của mình được tổ chức như sau:

├── src
│ ├── CheckNumeric.java: tệp chương trình chính
├── libs
│ ├── commons-lang3-3.10.jar: thư viện Common-Lang3

Thì lúc này để biên dịch và thực thi project, ta thực thi theo các lệnh và được kết quả như sau:

javac -d bin -cp libs/commons-lang3-3.10.jar src/CheckNumeric.java


java -cp bin:libs/commons-lang3-3.10.jar CheckNumeric

Output:
0123a4 is a numeric? false
01234 is a numeric? true

Như vậy, ta thấy theo cách truyền thống để biên dịch và thực thi project có sử dụng các thư viện ngoài, ta cần làm hai bước: * Tải thư viện từ Internet * Thêm đường dẫn thư viện vào classpath (sử dụng -cp ) mỗi khi biên dịch hoặc thực thi chương trình

Đây là một công việc "thủ công" tốn thời gian, khó khăn và dễ xảy ra lỗi (tải nhầm thư viện chẳng hạn). Maven ra đời để giúp chúng ta thực hiện các công việc này dễ dàng hơn, tốn ít thời gian hơn. Vì thế, hiệu suất công việc được cải thiện đáng kể, giúp lập trình viên tập
trung vào công việc phát triển chính ứng dụng của mình (đặc biệt khi làm các dự án nhóm nhiều người).

Sau đây là hướng dẫn sử dụng Maven để thêm thư viện Common-Lang3, biên dịch, đóng gói và thực thi project ở ví dụ (1).

Đầu tiên, ta tạo project bằng Maven với lệnh sau:

mvn archetype:generate \
-DgroupId=net.bqc \
-DartifactId=checknumeric \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DarchetypeVersion=1.4 \
-DinteractiveMode=false

groupId: tên định danh cho tổ chức của project, thường viết ngược. Ví dụ: vn.edu.vnu, org.apache
artifactId: tên định danh cho project
archetypeArtifactId và archetypeVersion thông tin về Archetype mà project sử dụng

Sau khi chạy xong, project có cấu trúc như dưới đây:

checknumeric
├── pom.xml: Project Object Model, chứa thông tin cấu hình project để Maven thực hiện build
└── src
├── main: chứa mã nguồn chính của dự án
│ └── java
│ └── net
│ └── bqc
│ └── App.java
└── test: chứa mã nguồn test của dự án
└── java
└── net
└── bqc
└── AppTest.java

Bây giờ, để thêm thư viện Common-Lang3 cho project, ta tìm kiếm thư viện theo từ khóa "common lang3" tại mvnrepository.com, chọn phiên bản thư viện muốn sử dụng và copy đoạn mã nguồn xml khai báo thư viện như hình dưới:
Ta thêm phần khai báo này vào thẻ \<dependencies> trong tệp pom.xml như bên dưới:

...
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.10</version>
</dependency>

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
...

Tại đây, ta thấy rằng thư viện junit-4.11 đã được thêm sẵn bởi vì nó mặc định đã được khai báo trong maven-archetype-quickstart.

Tiếp theo các bạn đổi tên tệp App.java thành CheckNumeric.java có nội dung như sau:

/**
*source: https://o7planning.org/vi/10131/huong-dan-su-dung-maven-cho-nguoi-moi-bat-dau
**/
package net.bqc; // chú ý phải khai báo package
import org.apache.commons.lang3.StringUtils; // thuộc thư viện common-lang3

public class CheckNumeric {


public static void main(String[] args) {
String text1 = "0123a4";
String text2 = "01234";

boolean result1 = StringUtils.isNumeric(text1);


boolean result2 = StringUtils.isNumeric(text2);

System.out.println(text1 + " is a numeric? " + result1);


System.out.println(text2 + " is a numeric? " + result2);
}
}

Để biên dịch project, các bạn thực thi lệnh sau:

mvn compile

Nếu biên dịch thành công, ta sẽ thực hiện thực thi lớp CheckNumeric bằng cách sử dụng plugin exec-maven-plugin. Các bạn thêm phần khai báo plugin này vào thẻ \<plugins> trong tệp pom.xml như sau:
...
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<mainClass>net.bqc.CheckNumeric</mainClass>
</configuration>
</plugin>
...
<plugins>
...

Để chạy project, các bạn thực hiện lệnh:

mvn exec:java

Và dưới đây là kết quả chạy:

[INFO] Scanning for projects...


[INFO]
[INFO] ------------------------< net.bqc:checknumeric >------------------------
[INFO] Building checknumeric 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- exec-maven-plugin:3.0.0:java (default-cli) @ checknumeric ---
0123a4 is a numeric? false
01234 is a numeric? true
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.557 s
[INFO] Finished at: 2020-06-15T17:02:43+07:00
[INFO] ------------------------------------------------------------------------

Kết luận
Bên trên mình đã hướng dẫn các bạn cách sử dụng Maven để quản lý phụ thuộc, biên dịch, và chạy project. Nhìn qua, có thể thấy Maven sẽ giúp các bạn thời gian trong các quá trình này của việc phát triển dự án (có thể các bạn hơi thấy rắc rối với cách cấu hình Maven
khi lần đầu tiên sử dụng) nhưng về lâu về dài Maven sẽ là một công cụ không thể thiếu trong viết phát triển các dự án lớp Java. Các bạn có thể tìm hiểu thêm các chức năng của Maven tại maven.apache.org.

You might also like