Hướng dẫn bien moi truong maven

Tư duy khi phân tích và thiết kế một ứng dụng phần mềm đó là có thể tách một hệ thống lớn thành các thành phần nhỏ. Với tư duy như vậy ta có thể nôm na định nghĩa rằng một ứng dụng phần mềm sẽ là sự tổng hợp của các thành phần (component) lại với nhau. Các thành phần ở đây thường được thể hiện ra là các thư viện cung cấp cho người lập trình viên các công cụ để việc lập trình trở nên dễ dàng hơn. Một ứng dụng có thể phụ thuộc (dependency) vào nhiều thành phần mà bản thân mỗi thành phần đó lại phụ thuộc vào các thành phần khác. Việc quản lý sự phụ thuộc giữa các thành phần này thực sự là không dễ dàng và nó sẽ trở nên phức tạp hơn khi mà ứng dụng càng ngày càng lớn ra. Để có thể giải quyết vấn đề này, Apache Maven được ra đời.

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 component, thư viện sử dụng trong dự án) , quản lý build, tự động download javadoc & source, ….

Bài viết này sẽ giới thiệu về Apache Maven và các đặc điểm cơ bản đặc trưng của nó.

Nội dung

  • 1 Cài đặt Apache Maven
    • 1.1 Kiểm tra xem Eclipse đã được cài đặt Maven chưa
    • 1.2 Cài đặt Maven vào Eclipse
      • 1.2.1 Bước 1: Download Maven
      • 1.2.2 Bước 2: Giải nén file Maven
      • 1.2.3 Bước 3: Cài đặt biến môi trường
      • 1.2.4 Khai báo vị trí cài đặt Maven với Eclipse
  • 2 Tạo project Maven
  • 3 Cấu hình Maven
  • 4 Đóng gói Project
    • 4.1 Tạo chương trình Java
    • 4.2 Biên dịch và đóng gói Project của bằng Maven
    • 4.3 Một số lệnh maven cơ bản
  • 5 Nguyên tắc hoạt động của Maven
  • 6 Cấu hình Maven download source và javadoc
  • 7 Quản lý các phụ thuộc trong Maven
    • 7.1 Các thư viện phụ thuộc nhau thế nào trong Maven?
    • 7.2 Loại bỏ sự trùng lặp thư viện

Apache maven hiện nay đã được tích hợp sẵn vào trong Eclipse. Tuy nhiên, một số phiên bản cũ hơn có thể không có hoặc bạn cần cài đặt phiên bản Maven mới hơn để sử dụng.

Kiểm tra xem Eclipse đã được cài đặt Maven chưa

Trước hết kiểm tra xem Eclipse của bạn đã cài đặt Maven chưa.

Hướng dẫn bien moi truong maven

Nếu có Maven Wizard điều đó có nghĩa là Eclipse của bạn đã cài Maven Plugin, và bạn có thể sẵn sàng làm việc. Nếu chưa có, hãy xem tiếp phần cài đặt.

Cài đặt Maven vào Eclipse

Có 2 cách để cài đặt Maven trên Eclipse:

  • Cách 1: Cài đặt Maven như là một plugin nhúng vào Eclipse. Cách này tương tự như cài đặt các plugin khác của Eclipse.
  • Cách 2: Cài đặt Maven độc lập trên Windows và khai báo để Eclipse có thể sử dụng nó.

Trong bài này tôi sẽ hương dẫn các bạn Cách 2 – cài đặt Maven độc lập trên Windows.

Bước 1: Download Maven

Vào trang chủ của Mavenvà vào mục Download, sau đó download file .zip như sau:

Hướng dẫn bien moi truong maven

Bước 2: Giải nén file Maven

Bài viết này sẽ hướng dẫn cách cài đặt Maven trên Window, sau khi down file .zip về, sau đó giải nén ra như thư mục bất kỳ. Chẳng hạn giải nén vào:

  • D:\WorkSpace\gpcoder\apache-maven-3.5.2

Hướng dẫn bien moi truong maven

Bước 3: Cài đặt biến môi trường

Bước tiếp theo, bạn khai báo biến môi trường cho Maven. Các hình ảnh dưới đây, tôi thực hiện trên Window 10, với các hệ điều hành Window khác cũng tương tự.

Lưu ý: Để maven hoạt động bạn cần phải cài đặt JDK trước. Đối với phiên bản Maven 3.3+ yêu cầu phải cài đặt JDK 1.7 trở lên.

Trên Desktop, nhấn phải chuột vào Computer, chọn Properties à Chọn tab Advance –> Evironment Varialbes –> Ở mục System Variable chọn New

Hướng dẫn bien moi truong maven

Nhập vào đường dẫn tới thư mục Maven:

  • Variable name: M2_HOME
  • Variable value: D:\WorkSpace\gpcoder\apache-maven-3.5.2

Hướng dẫn bien moi truong maven

Tiếp theo sửa đổi biến môi trường path:

Hướng dẫn bien moi truong maven

Thêm giá trị: %JAVA_HOME%\bin

Hướng dẫn bien moi truong maven

Kiểm tra lại biến môi trường cài đặt: Start -> Run -> cmd -> nhập mvn -version

Hướng dẫn bien moi truong maven

Khai báo vị trí cài đặt Maven với Eclipse

Mở thư mục Maven đã cấu hình ở trên: D:\WorkSpace\gpcoder\apache-maven-3.5.2\conf

Mở file settings.xml để thay đổi vị trí chứa các file thư viện được maven download về:

<localRepository>C:\Users\ptgia\.m2\repository</localRepository>

Hướng dẫn bien moi truong maven

Mở Eclipse -> Window -> Reference -> Maven -> Installations 

Hướng dẫn bien moi truong maven

Nhấn Add thêm vào một cấu hình mới và trỏ đến vị trí cài đặt Maven.

Hướng dẫn bien moi truong maven

Check chọn Maven vừa thêm -> nhấn nút Apply and close

Hướng dẫn bien moi truong maven

Tiếp theo khai báo vị trí file cấu hình của Maven: file settings.xml đã thay đổi ở trên.

Hướng dẫn bien moi truong maven

Đến đây việc cài đặt Maven cho Eclipse hoàn thành.

Tạo project Maven

Mở Eclipse -> File -> New -> Maven Project

Hướng dẫn bien moi truong maven

Trong dialog hiện ra, lựa chọn “Create a simple project …” như trong hình. Chọn Next:

Hướng dẫn bien moi truong maven

Nhập các giá trị như bên dưới:

Hướng dẫn bien moi truong maven

Trong đó :

  • Group Id : Tên tổ chức / công ty / cá nhân của dự án. Ví dụ: com.gpcoder
  • Artifact Id : Tên dự án (project). Lưu ý: tên viết liền, không có khoảng trắng ở giữa.
  • Version : phiên của dự án.
  • Package : để ý 2 giá trị : jar có nghĩa là thư viện or java application, warweb application.
  • Name : Tên project (trong Eclipse)

Nhấn Finish, project đã được tạo như sau:

Hướng dẫn bien moi truong maven

Cấu hình Maven

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="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.ptg</groupId>
	<artifactId>MavenExmaple1</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>Maven Exmaple 1</name>
</project>

Bây giờ chúng ta sẽ thử add 1 thư viện vào dự án. Ví dụ chúng ta sẽ add thư viện Apache Poi, đây là thư viện của Java dùng để hỗ trợ xuất dữ liệu ra file Excel. Thêm thẻ khai báo vào file pom.xml như sau:

<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.ptg</groupId>
	<artifactId>MavenExmaple1</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>Maven Exmaple 1</name>

	<!-- Các thư viện được khai báo bên trong cặp thẻ dependencies -->
	<dependencies>

                <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>3.17</version>
		</dependency>

	</dependencies>

</project>

Thư viện khai báo dependency như ở trên các bạn có thể tìm ở http://mvnrepository.com.

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.

Hướng dẫn bien moi truong maven

Maven sẽ tự động download các thư viện cần thiết khác (nếu có) cho chúng ta. Trong ví dụ trên, tôi chỉ khai báo thư viện Apache Poi, nhưng thư viện này có sử dụng các thư viện khác nên nó cũng sẽ download cho chúng ta. Hãy thử tưởng tượng nếu không có Maven, chúng ta sẽ phải Add bằng tay rất nhiều thư viện và phải lựa chọn version phù hợp với nó. Khi cần nâng cấp thư viện cũng sẽ rất khó khăn do phải cập nhật tất cả các phiên bản của các thư viện có liên quan.

Mặc định, các thư viện download về sẽ nằm ở thư mục C:\Users\{username}\.m2\repository. Các bạn cũng có thể kiểm tra lại thư mục lưu trữ trong phần cấu hình Maven của Eclipse: Eclipse -> Window -> Reference -> Maven -> User Settings

Hướng dẫn bien moi truong maven

Đóng gói Project

Tạo chương trình Java

Tạo file GpUtils.java như sau:

Hướng dẫn bien moi truong maven

Biên dịch và đóng gói Project của bằng Maven

Nhấn chuột phải lên Project -> Run As -> Maven install -> chờ Maven biên dịch và đóng gói xong -> Refresh lại project để xem kết quả:

Hướng dẫn bien moi truong maven

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.

Hướng dẫn bien moi truong 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 war.
  • install : đư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).

Nguyên tắc hoạt động của Maven

Hướng dẫn bien moi truong maven

Hình minh họa ở trên chỉ ra cách hoạt động của Maven.

  • Khi khai báo pom.xml rằng project của bạn phụ thuộc vào thư viện common-lang3 phiên bản 3.3.2.
  • Ngay sau khi bạn Save file pom.xml Maven sẽ kiểm tra xem thư viện này đã có tại kho chứa địa phương (Local Repository) trên máy tính của bạn chưa. Nếu chưa có nó sẽ download về từ kho chứa (Repository) thư viện từ trên Internet xuống.
  • Cuối cùng là Maven sẽ tự động khai báo ClassPath cho Project tới vị trí file jar được download về.

Như vậy mọi bạn chỉ cần khai báo thư viện muốn sử dụng tại pom.xml. Việc quản lý thư viện đã do Maven lo liệu.

Cấu hình Maven download source và javadoc

Thông thường Maven chỉ download các file binary về máy (Local Repository). Để Maven download cả sourcejavadoc cấu hình như sau: Windows -> Preferences

Hướng dẫn bien moi truong maven

Quản lý các phụ thuộc trong Maven

Các thư viện phụ thuộc nhau thế nào trong Maven?

Hãy xem ví dụ dưới đây:

<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.ptg</groupId>
	<artifactId>MavenExmaple1</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>Maven Exmaple 1</name>

	<!-- Các thư viện được khai báo bên trong cặp thẻ dependencies -->
	<dependencies>

		<!-- https://mvnrepository.com/artifact/org.glassfish.web/javax.servlet.jsp.jstl -->
		<dependency>
			<groupId>org.glassfish.web</groupId>
			<artifactId>javax.servlet.jsp.jstl</artifactId>
			<version>1.2.4</version>
		</dependency>

	</dependencies>

</project>

File pom.xml trên đã khai báo sử dụng thư viện javax.servlet.jsp.jstl, thư viện này phụ thuộc vào jstl-api. Và jstl-api lại phụ thuộc vào 2 thư viện servlet-api và jsp-api. Sự phụ thuộc này được mô tả trên trang thư viện Maven như sau:

Hướng dẫn bien moi truong maven

Trên Eclipse bạn có thể nhìn thấy cây minh họa sự phụ thuộc như sau:

Hướng dẫn bien moi truong maven

Hướng dẫn bien moi truong maven

Loại bỏ sự trùng lặp thư viện

Khi khai báo thư viện trên Maven, có thể gây ra sự trùng lặp thư viện. Xem ví dụ dưới đây:

<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.ptg</groupId>
	<artifactId>MavenExmaple1</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>Maven Exmaple 1</name>

	<!-- Các thư viện được khai báo bên trong cặp thẻ dependencies -->
	<dependencies>

		<!-- https://mvnrepository.com/artifact/org.glassfish.web/javax.servlet.jsp.jstl -->
		<dependency>
			<groupId>org.glassfish.web</groupId>
			<artifactId>javax.servlet.jsp.jstl</artifactId>
			<version>1.2.4</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>4.0.0</version>
			<scope>provided</scope>
		</dependency>

	</dependencies>

</project>

File pom.xml trên đã khai báo sử dụng:

  • Thư viện javax.servlet.jsp.jstl phụ thuộc vào jstl-api. Và jstl-api lại phụ thuộc vào 2 thư viện servlet-api và jsp-api.
  • Thư viện javax.servlet không phụ thuộc bất kỳ thư viện nào khác.

Trên Eclipse bạn có thể nhìn thấy cây minh họa sự phụ thuộc như sau:

Hướng dẫn bien moi truong maven

Hướng dẫn bien moi truong maven

Như bạn thấy: Eclipse đã đánh dấu 2 thư viện servlet-api trùng lặp. Để loại bỏ trùng lặp, Nhấn phải chuột vào thư viện phụ thuộc cần loại trừ, chọn Exclude Maven Artifact… -> OK.

Hướng dẫn bien moi truong maven

Hướng dẫn bien moi truong maven

Nhấn Save để lưu lại. Bây giờ file pom.xml của bạn không còn sự trùng lặp thư viện:

Hướng dẫn bien moi truong maven

Eclipse sẽ tự động thêm đoạn code <exclusions> vào pom.xml:

<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.ptg</groupId>
	<artifactId>MavenExmaple1</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>Maven Exmaple 1</name>

	<!-- Các thư viện được khai báo bên trong cặp thẻ dependencies -->
	<dependencies>

		<!-- https://mvnrepository.com/artifact/org.glassfish.web/javax.servlet.jsp.jstl -->
		<dependency>
			<groupId>org.glassfish.web</groupId>
			<artifactId>javax.servlet.jsp.jstl</artifactId>
			<version>1.2.4</version>
			<exclusions>
				<exclusion>
					<groupId>javax.servlet</groupId>
					<artifactId>servlet-api</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>4.0.0</version>
			<scope>provided</scope>
		</dependency>

	</dependencies>

</project>

Trên đây là những giới thiệu cơ bản về 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 trên trang maven.apche.org.

Tài liệu tham khảo:

  • https://maven.apache.org/
  • http://o7planning.org/vi/10131/huong-dan-su-dung-maven-cho-nguoi-moi-bat-dau
  • http://www.mkyong.com/tutorials/maven-tutorials/

Chuyên mục: IDE, Tools Được gắn thẻ: Maven

Bình luận

bình luận