Xây dựng dự án nhiều Module với Maven
Xem thêm các chuyên mục:

Là một website được viết trên công nghệ web Flutter vì vậy hỗ trợ rất tốt cho người học, kể cả những người học khó tính nhất.
Hiện tại website đang tiếp tục được cập nhập nội dung cho phong phú và đầy đủ hơn. Mong các bạn nghé thăm và ủng hộ website mới của chúng tôi.


Tài liệu này được viết dựa trên:
-
Eclipse 4.6 (NEON)
Bạn đang xem tài liệu nâng cao về Maven. Nếu bạn mới bắt đầu với Maven. Bạn nên xem trước tài liệu hướng dẫn Maven cho người mới bắt đầu (Hello world Maven) tại:
Đây là mô hình ví dụ minh họa trong tài liệu này.

Mục tiêu của hướng dẫn là:
- Module nọ sử dụng Module kia thế nào trong Maven
- Đóng gói đồng loạt Module khác nhau bằng Maven (đầu ra: jar, war).
MathWebApp: là một WebApp project
MathLibrary: là một Project thư viện, chứa các class tiện ích được sử dụng bởi MathWebApp.
MavenParent: là một project làm nhiệm vụ đóng gói 2 project trên, nó là một project cha, và 2 project trên coi như là 2 module con của nó. MavenParent sẽ:
MathLibrary: là một Project thư viện, chứa các class tiện ích được sử dụng bởi MathWebApp.
MavenParent: là một project làm nhiệm vụ đóng gói 2 project trên, nó là một project cha, và 2 project trên coi như là 2 module con của nó. MavenParent sẽ:
- Đóng gói MathLibary thành file jar
- Đóng gói MathWebApp thành file war.
- File/New/Other...

Đây là một Project đơn giản, chúng ta không cần phải chọn nguyên mẫu (archetype) Maven.
Check chọn:
Check chọn:
- Create a simple project (skip archetype selection)

Nhập vào:
- Group Id: org.o7planning
- Artifact Id: MathLibrary
- Packaging: jar
Các thông tin về module cha bỏ qua, chúng ta sẽ sét đặt nó sau.

Project đã được tạo ra:

Tạo mới class MathUtils:

MathUtils.java
package org.o7planning.mathutils;
public class MathUtils {
public static int sum(int a, int b) {
return a + b;
}
}
- File/New/Other..


Chọn nguyên mẫu (archetype) maven-archetype-webapp. Eclipse sẽ tạo ra một Project Maven có cấu trúc của một ứng dụng web.

Nhập vào:
- Group Id: org.o7planning
- Artifact Id: MathWebApp
- Version: 0.0.2-SNAPSHOT (Phân biệt với version của MathLibrary - Không bắt buộc)
- Package: org.o7planning.mathwebapp

Đây là hình chụp project MathWebApp vừa được tạo ra. Bạn có thể thấy thông báo lỗi ở đâu đó trên Project, đừng lo lắng về điều đó, nguyên nhân là bạn chưa khai báo thư viện Servlet.

Eclipse tạo ra project này có thể sai cấu trúc. Bạn cần phải kiểm tra.

- Mở file pom.xml

Thêm vào:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
Như minh họa dưới đây:

Giờ lỗi đã không còn tồn tại:

Tiếp tục khai báo maven, MathWebApp sử dụng MathLibrary:
<dependency>
<groupId>org.o7planning</groupId>
<artifactId>MathLibrary</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
MathWebApp/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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.o7planning</groupId>
<artifactId>MathWebApp</artifactId>
<packaging>war</packaging>
<version>0.0.2-SNAPSHOT</version>
<name>MathWebApp Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.o7planning</groupId>
<artifactId>MathLibrary</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<finalName>MathWebApp</finalName>
</build>
</project>
Sửa file index.jsp sử dụng class tiện ích MathUtils trong project MathLibrary.
index.jsp
<html>
<body>
<h2>Hello World!</h2>
<%
int a = 100;
int b = 200;
int c = org.o7planning.mathutils.MathUtils.sum(a,b);
out.println("<h2>"+ c+"</h2>");
%>
</body>
</html>
Tạo một Java project thông thường.
- File/New/Other..



Nhấn phải chuột vào project MavenParent vừa được tạo ra, và chuyển đổi (convert) nó thành Maven Project.

Nhập vào:
- Group Id: org.o7planning
- Artifact Id: MavenParent
- Version: 1.0.0-SNAPSHOT
- Packaging: pom


Đây là hình mô tả ngắn gọn cách cấu hình Maven, quan hệ giữa các module (Project).

Mở file pom.xml của 2 project MathLibrary & MathWebApp thêm vào:
<parent>
<groupId>org.o7planning</groupId>
<artifactId>MavenParent</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>../MavenParent/pom.xml</relativePath>
</parent>
Mở file pom.xml của MavenParent thêm vào:
<modules>
<module>../MathLibrary</module>
<module>../MathWebApp</module>
</modules>
MathLibrary/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>org.o7planning</groupId>
<artifactId>MathLibrary</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.o7planning</groupId>
<artifactId>MavenParent</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>../MavenParent/pom.xml</relativePath>
</parent>
</project>
MathWebApp/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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.o7planning</groupId>
<artifactId>MathWebApp</artifactId>
<packaging>war</packaging>
<version>0.0.2-SNAPSHOT</version>
<name>MathWebApp Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.o7planning</groupId>
<artifactId>MathLibrary</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
<parent>
<groupId>org.o7planning</groupId>
<artifactId>MavenParent</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>../MavenParent/pom.xml</relativePath>
</parent>
<build>
<finalName>MathWebApp</finalName>
</build>
</project>
MavenParent/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>org.o7planning</groupId>
<artifactId>MavenParent</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>../MathLibrary</module>
<module>../MathWebApp</module>
</modules>
</project>
Nhấn phải chuột vào project MavenParent chọn:
- Run As/Maven install.

Kết quả:

