Ngày xưa, khi chưa có Apache Maven, nếu các bạn làm việc với ứng dụng Java có sử dụng các thư viện bên ngoài, các bạn phải download manually các thư viện đó và add chúng vào classpath để ứng dụng của chúng ta có thể sử dụng được. Sử dụng Apache Maven thì các bạn sẽ không cần làm manual như vậy nữa. Apache Maven là một công cụ dùng để download và quản lý các thư viện (hay còn gọi là các dependencies) mà ứng dụng của các bạn đang cần sử dụng. Thay vì các bạn phải manual download từng dependency như trước, các bạn chỉ cần khai báo thông tin của các dependencies và version của chúng, Apache Maven sẽ download tự động cho chúng ta. Ngoài ra thì Apache Maven còn giúp chúng ta có thể automate việc build source code (compile → test → package → deploy) nữa đó các bạn. Trong bài viết này, chúng ta sẽ cùng nhau tìm hiểu những kiến thức cơ bản về Apache Maven các bạn nhé!
Đầu tiên, để sử dụng Apache Maven, các bạn hãy cài đặt nó trước nhé! Nếu các bạn đang sử dụng macOS thì có thể tham khảo tại đây.
Tất cả các Maven project đều phải có một tập tin tên là pom.xml. POM là viết tắt của Project Object Model đó các bạn!
Khi các bạn tạo mới một Maven project sử dụng IntelliJ IDE chẳng hạn, nội dung ban đầu của tập tin pom.xml thông thường, các bạn sẽ thấy như sau:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.huongdanjava.apachemaven</groupId> <artifactId>apache-maven-example</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>25</maven.compiler.source> <maven.compiler.target>25</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> </project> |
Tập tin pom.xml này sẽ cần phải định nghĩa nội dung follow theo tập tin XSD schema ở địa chỉ http://maven.apache.org/xsd/maven-4.0.0.xsd đó các bạn!
Thẻ root ngoài cùng sẽ là thẻ <project>. Này là thẻ bắt buộc để chúng ta bắt đầu định nghĩa các thông tin dependencies của Maven project.
Bên trong thẻ <project> này, có 4 thẻ khác là bắt buộc, các bạn cũng cần phải khai báo là:
- <modelVersion>
- <groupId>
- <artifactId>
- <version>
Thẻ <modelVersion> định nghĩa version của POM model. Version này liên quan đến định dạng và cấu trúc của tập tin pom.xml đó các bạn! 4.0.0 là latest version của POM model các bạn nhé!
Thẻ <groupId> thường chúng ta sẽ sử dụng tên của tổ chức hoặc domain website để đặt giá trị cho nó. Nó dùng để định nghĩa, thư viện hay ứng dụng sử dụng Maven project này, thuộc về tổ chức hay website nào.
Thẻ <artifactId> sẽ định nghĩa tên của ứng dụng hoặc thư viện đang được phát triển sử dụng Maven project này.
Thẻ <version> định nghĩa phiên bản của ứng dụng hoặc thư viện.
Để khai báo các thư viện mà ứng dụng của các bạn cần sử dụng, chúng ta sử dụng các thẻ <dependency>. Các thẻ <dependency> này sẽ nằm trong thẻ <dependencies> như sau:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.huongdanjava.apachemaven</groupId> <artifactId>apache-maven-example</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>25</maven.compiler.source> <maven.compiler.target>25</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.38</version> </dependency> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> <version>1.6.3</version> </dependency> </dependencies> </project> |
Thông tin của mỗi dependency cũng sẽ bao gồm groupId, artifactId và version đó các bạn!
Khi các bạn chạy command của Apache Maven, nó sẽ đọc nội dung của tập tin pom.xml này, dựa vào thông tin của các bạn dependencies mà các bạn khai báo, nó sẽ biết những thư viện nào mà các bạn đang cần sử dụng cho ứng dụng của mình, phiên bản là gì, build source code như thế nào. Sau đó, nó sẽ tự động làm mọi thứ cho chúng ta.
Các bạn sẽ thắc mắc các thư viện mà chúng ta khai báo, Apache Maven sẽ download từ đâu phải không? Nó sẽ download từ các Remote Maven Repository, hay còn gọi là nơi lưu trữ các thư viện này đó các bạn! Mặc định sẽ là từ Maven Repository này https://repo.maven.apache.org/maven2/
Sau khi download, Apache Maven sẽ cache các thư viện này trong thư mục mặc định, gọi là Local Maven Repository, ở đường dẫn ~/.m2/repository. Nhờ đó mà nếu một ứng dụng khác, một thư viện khác, sử dụng các dependencies cùng groupId, cùng artifactId, cùng version, Apache Maven sẽ không phải download nữa, vì nó đã download về Local Maven Repository rồi đó các bạn.
Sau khi đã định nghĩa các thư viện mà ứng dụng của các bạn cần sử dụng, các bạn có thể sử dụng một số command với goal sau để download dependencies và build source code cho project của mình các bạn nhé:
- “mvn clean”: xoá các tập tin đã build trước đó
- “mvn compile”: compiles Java source code
- “mvn test”: chạy các JUnit tests
- “mvn package”: đóng gói tập tin JAR hoặc WAR cho ứng dụng
- “mvn install”: Download và install các dependencies vào Local Maven Repository
- “mvn deploy”: Upload các thư viện lên các Remote Maven Repository
Các bạn có thể combine các goal lại với nhau để chạy trong một lần, không nhất thiết phải tách biệt ra các bạn nhé! Ví dụ, chúng ta có thể chạy “mvn clean install” hoặc “mvn clean package” đều được.
Với tập tin pom.xml được định nghĩa như trên, sau khi các bạn chạy command “mvn clean install” chẳng hạn, các bạn sẽ thấy Apache Maven tự động download và install các dependencies này về Local Maven Repository như sau:

Trên đây chỉ là những điểm cơ bản về Apache Maven thôi các bạn. Còn nhiều thứ chúng ta có thể làm để build source code với Apache Maven, mình sẽ giới thiệu với các bạn trong những bài viết khác, các bạn nhé!

