Maven java là gì

Trong bài này chúng ta sẽ tìm hiểu về
Maven là gìtại sao lại dùng Maven trong các project Java.

Mục lục

  1. Maven là gì
  2. Công dụng của Maven
  3. Maven hoạt động như thế nào
  4. Cấu trúc của một project Maven
  5. Tạo một project Maven đơn giản

Maven là gì

Một cách đơn giản hóa, Maven là một công cụ để quản lý cấu trúc của một dự án, từ các library [thư viện] đến phân bố thư mục, versioning.

Một cách chi tiết hơn

  • Maven sẽ quản lý cấu trúc folder và package của dự án dựa theo mô hình đã được định sẵn.
  • Các thư viện được thêm vào dự án thông qua Maven sẽ được kiểm tra độ tương thích với nhau. Đồng thời, một số thư viện cần có các thư viện khác đi kèm với nó. Maven sẽ quản lý luôn cả chuyện đó. Trong Maven, các thư viện được khai báo còn gọi là các dependency.

Công dụng của Maven

  • Hỗ trợ quản lý thư viện tốt. Hãy so sánh Maven với việc thêm thư viện thông thường. Khi bạn thêm một thư viện nào đó vào project bằng tay, bạn sẽ phải thêm các thư viện đi kèm chung với nó. Giả sử ở đây mình cần thêm thư viện của Spring, mình sẽ thêm bằng tay các thư viện liên quan sau đây

    Tuy nhiên, với Maven, mình chỉ cần khai báo thư viện thiết yếu nhất và Maven sẽ làm những thứ còn lại.
  • Hỗ trợ quản lý version phù hợp. Các thư viện khi thêm vào còn phải dựa vào version của nó. Các thư viện đi kèm cũng cần có version phù hợp. Giả sử trong một team, các thành viên không thể gặp trực tiếp nhau mà phải làm việc qua internet thì việc thống nhất việc sử dụng thư viện phù hợp là điều rất cần thiết để tránh các vấn đề về xung đột sau này.
  • Có sẵn cấu trúc thư mục cụ thể. Các thư mục được tổ chức sẵn để tổ chức code tốt ngay từ ban đầu.
  • Có thể so sánh Maven khá giống Nuget của Visual Studio. Tuy nhiên Nuget không đảm nhận chức năng tạo cấu trúc project sẵn.

Maven hoạt động như thế nào

Khác với việc phải thêm thư viện thủ công như bình thường, các dependency trong Maven được cộng đồng tải online. Khi khai báo các dependency trong file pom.xml và thực hiện việc Update project thì các dependency đó sẽ được tải xuống. Có hai loại Maven thông dụng

  • Loại internal: các dependency khi được tải trên mạng về sẽ được lưu lại trong máy. Điều này đồng nghĩa với việc nếu có nhiều người tham gia project làm việc trên nhiều máy khác nhau thì mỗi máy phải tải các dependency này về. Tuy nhiên, nó cũng có điểm thuận lợi khi không cần phải liên tục kết nối internet để có repository.
  • Loại Nexus: các dependency khi tải về có thể được share trong cùng một mạng. Đồng thời nó có một số tính năng cải tiến hơn loại internal. Tuy nhiên do nhu cầu về kết nối và đơn giản thì loại internal vẫn được sử dụng nhiều hơn.

Cấu trúc một project Maven

Dưới đây là một ví dụ điển hình cho cấu trúc thư mục của một project Maven.

Trong đó

  • Root: chứa file pom.xml và các thư mục con. File pom.xml chứa các khai báo dependency, khai báo scope của các task [test, build, v.v…]. POM viết tắt cho Project Object Model. Dưới đây là cấu trúc chuẩn của một dependency trong pom.xml
    • groupId: chứa id của group. Group ở đây thường là tên các tổ chức tạo ra các thư viện. Ví dụ với thư viện spring-core sẽ có groupId là org.springframework. Đồng thời groupId cũng chính là tên package.
    • artifactId: chứa id của thư viện. Ở đây có thể coi là tên của thư viện. Tuy nhiên tên các thư viện trên Maven repository không được trùng nhau.
    • version: chứa thông tin version của dependency.
    • scope: khai báo tầm vực hoạt động. Ví dụ trên hình thì nó sẽ được compile chỉ khi chạy test.
  • src/main/java: chứa các file java. Đối với một web project thì ở đây thường sẽ được chia ra các package nhỏ chứa các file config, controller, view model, v.v…
  • src/main/resources
    chứa các file property hoặc trong trường hợp sử dụng hibernate thì đây là nơi chứa hibernate.
  • src/test/java
    chứa các file test java.
  • src/test/resources
    chứa các resource cần thiết cho việc test.

Cách tạo một project Maven trong Eclipse

Ở đây mình sẽ hướng dẫn các bạn tạo Maven dành cho web Spring do hiện nay với các hệ thống Spring lớn thì đa số đều dùng Maven để quản lý.

Maven đã được tích hợp sẵn trong Eclipse trong các bản gần đây, ngoại trừ các bản quá cũ. Mình khuyên là nên xài bản mới hơn

Chọn New -> Other ->Maven Project

Có thể chọn workspace cũ hoặc workspace mới

Tiếp theo ta sẽ chọn catalog là Internal. Do mình đang ví dụ về Spring nên mình sẽ chọn loại maven-archetype-webapp.

Tiếp theo có 2 field cần phải điền vào là Group Id và Artifact Id.

Nhấn finish. Đây là cấu trúc project mà Eclipse sẽ tạo ra.


Tuy nhiên đôi khi thì Eclipse tạo ra thiếu một số thư mục. Các bạn có thể thêm vào cho hoàn chỉnh với cấu trúc mẫu đã nêu ở trên.

Chủ Đề