Maven là gì? Sử dụng maven trong dự án java

1. Maven là gì ?
Apache maven là một chương trình quản lý dự án cho phép các developers có thể quản lý về version, các dependencies ( các thư viện sử dụng trong dự án ) , quản lý build, tự động download javadoc & source, …
Vì sao phải sử dụng maven? Bạn hãy thử tượng nếu dự án của chúng ta sử dụng rất nhiều thư viên thứ 3 : struts, hibernate, spring, … Việc import thư viện và các dependency ( dịch hiểu là “sự phụ thuộc” ) là rất vất vả, chưa kể đến việc version của các thư viện có thể conflig với nhau, việc import đầy đủ cácthư viện là cả một vấn đề. VD như bạn muốn sử dụng struts, thì điều bắt buộc là chúng ta phải import cả thư viện servlet.

2. Repository : Là nơi để chương trình maven download các dependency. Chi tiết tham khảo ở link :
https://maven.apache.org/guides/introduction/introduction-to-repositories.html

3. Install : Apache maven hiện nay đã được tích hợp sẵn vào trong eclipse ( trừ những bản rất cũ, mình khuyên các bạn không nên dùng những bản cũ này ).

4. Tạo 1 project maven :

Bước 1: File -> New -> Maven Project. Trong dialog hiện ra, lựa chọn “Create a simple project …” như trong hình. Chọn next

Bước 2: Điền như trong hình

Trong đó :

  • Group Id : Tên tổ chức / công ty / cá nhân của dự án

  • Artifact Id : Tên của packge, dự án

  • Version : version của project

  • Package : để ý 2 giá trị : jar có nghĩa là thư viện or java
    application, war là web application

  • Name : Tên project (trong eclipse)

Nhấn finish

5. Cấu hình file pom :

File pom.xml là nơi khai báo tất cả những gì liên quan đến dự án được cấu hình qua maven, như khai báo các dependency, version của dự án, tên dự án, repossitory … Mở file pom.xml ra, chúng ta thấy nội dung như sau :

 <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" 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>leviethoai</groupid>  <artifactid>maven-sample</artifactid>  <version>0.0.1-SNAPSHOT</version>  <name>Maven sample</name></project>    

Trong đó, 0.0.1-SNAPSHOT là version của project. Bây giờ chúng ta sẽ thử add 1 thư viện vào dự án, vd chúng ta sẽ add thư viện hibernate. Thêm thẻ khai báo vào file pom :

<dependencies>  <dependency>   <groupid>org.hibernate</groupid>   <artifactid>hibernate-core</artifactid>   <version>5.0.0.CR2</version>  </dependency> </dependencies>

Các khai báo dependency như ở trên các bạn có thể tìm ở http://mvnrepository.com
Khi đó, file pom sẽ có nội dung như sau :

<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" 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>leviethoai</groupid> <artifactid>maven-sample</artifactid> <version>0.0.1-SNAPSHOT</version> <name>Maven sample</name>  <dependencies>  <dependency>   <groupid>org.hibernate</groupid>   <artifactid>hibernate-core</artifactid>   <version>5.0.0.CR2</version>  </dependency> </dependencies> </project>

Lưu file pom lại và đợi project build xong, thư viện sẽ được add tự động vào project : (ở mục Maven Dependencies)

Trong VD trên, maven sẽ tự động download các thư viện cần thiết khác để có thể sử dụng hibernate core, bởi vì hibernate được xây dựng trên (or sử dụng lại) các thư viện này. Hãy thử tưởng tượng nếu không có maven, bạn sẽ phải add bằng tay một đống thư viện như trên cùng với version phù hợp!

Các thư viện download về sẽ nằm ở thư mục C:\Users{username}.m2\repository.
Thư viện hibernate trong ví dụ trên sẽ nằm ở thư mục C:\Users{username}.m2\repository\org\hibernate\hibernate-core\5.0.0.CR2.

Các bạn có thể mở file pom (hibernate-core-5.0.0.CR2.pom) của hibernate lên, để xem nó phụ thuộc những dependencies nào, và cũng để hiểu rõ hơn về maven.

6. Một số lệnh maven cơ bản :

Right click vào project, chọn Run As -> Maven Build… Trong phần Goal, điền các command, mỗi command cách nhau một khoảng trắng, sau đó click Run để chạy maven.

Một số lệnh maven cơ bản :

clean : clean lần build trước đócompile : tiến hành compile, dịch các file java sang class, copy các file resources, lib…package : package project thành jar or warinstall : đưa 1 thư viện lên repository (ở đây là local), để các project khác có thể sử dụng ( chỉ sử dụng với các project jar)

7. Tổng kết :

Qua ví dụ trên chúng ta đã hiểu được khái niệm cơ bản của maven. Ngoài ra maven còn rất nhiều tính năng khác, các bạn có thể tham khảo chi tiết ở link https://maven.apache.org/

Trên đây mình chỉ trình bày sơ bộ về khái niệm maven. Hy vọng có ích cho các bạn. Nếu bài viết có gì sai sót, mong các bạn góp ý. Thank

16 Likes

thanks bạn,bài viết của bạn rất cơ bản,ngắn gọn và súc tích,mình chưa biết maven là gì và để làm gì nhưng đọc xong bài của bạn là hiểu được tổng quát và nắm đươc những điều cơ bản nhất,bạn là người rất có khả năng tổng hợp và nêu bật được bản chất của vấn đề,điều này là tố chất của một giáo sư ,một lần nữa cám ơn bài viết của bạn rất nhiều
chúc bạn luôn mạnh khỏe và thành công

2 Likes

Vãi cả comment của bạn :v

1 Like

Có cách nào để publish library của mình lên Maven Repository không nhỉ?

Cho mình hỏi được không. Ví dụ mình không dùng dependencies trên central maven mà mình dựng 1 server repository chứa các dependencies mình cần dùng cho project thì làm cách nào để mình có thể push 1 dependency lên đó ?

Chú có thể dùng jfog để build repository riêng trên server chú.
Nhớ add server vào setting.xml của maven

Cho em hỏi luôn là có cách nào khác không dùng jfog artifactory này không ạ ?? em tính dựng 1 con web có autoindex giống trang https://repo1.maven.org/maven2/ thì có khả quan không?

Được, anh chưa dùng trưc tiêp của thằng maven, nhưng thấy nó có hướng dẫn làm
https://maven.apache.org/guides/introduction/introduction-to-repositories.html

1 Like

oh thank anh, em đang kẹt ở khu push 1 cái dependency lên server của em. Chưa biết setup nó như thế nào :smile:

Có cách nào mình add newuser không dùng GUI không anh?? em search hôm qua giờ toàn ra tut dùng GUI. Em install artifactory trên centos bằng file zip.

Mình thì tận dụng github vì server mình không lớn nên không thể cài được JFrog hay Nexus OSS


Cách này chỉ tình thế thôi chứ không quản lý hiệu quả như JFrog hay Nexus OSS

Lúc trước mình có thử tự tạo server riêng để làm private repository luôn (đã làm được) nhưng giờ thấy anh @nguyenhuuca gợi ý dùng artifactory nên mình muốn thử :smiley:

em dùng jfrog ah, thử xem API của nó xem, hoăc database/xml để add

để em thử thử. Tại em thấy artifactory này nó cũng hay và được recommend bởi maven luôn.

cái database/xml em kiếm mãi không có nhỉ :sweat_smile: khá bất tiện vì không dùng GUI.

Khi em dùng thử lynx http://localhost:8080/artifactory/api/security/users sao nó báo lại là not found nhỉ

ý anh là có thể tạo trong database hoặc xml ấy, anh nghỉ chắc có file xml để câu hình new user

em mới phát hiện ra dùng api nó yêu cầu bản pro :slight_smile: Bản OSS không dùng được :joy: để em kiếm cách tạo trong database hoặc xml file (nếu có)

Bổ sung thêm cho chủ thớt là nếu mà các bạn không thích sử dụng các IDE hay là thay vì thế các bạn thích dùng text-editor kiểu VS Code, Atom, VIM,… nên là việc tạo maven không có sẵn trong các text editor đó. Vậy nên tạo maven bằng command line như sau(nhớ rằng maven phải được tải full bộ về và cấu hình):

mvn archetype:generate -DgroupId=<company-name> -DartifactId=<package-name> -DarchetypeArtifactId=<maven-archetype> -DinteractiveMode=false

thì trong đó cái <maven-archetype> thì có thể thay thế bằng những cái này(reference only):

  • -DarchetypeArtifactId=maven-archetype-quickstart để tạo cái maven của bạn với cấu trúc thư mục đơn giản và dành cho người mới học maven(đương nhiên là chỉ có đủ chức năng cho starter)
  • -DarchetypeArtifactId=maven-archetype-webapp để tạo cái mavne của bạn với cấu trúc thư mục thích hợp để làm việc với webapp

Và ngoài ra còn nhiều archetype nữa thì tham khảo trên mạng là ok

1 Like

bài viết hữu ích với tôi, mặc dù tôi vẫn chưa hiểu lắm

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?