Xây dựng dự án nhiều Module với Maven
1. Giới thiệu
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:
2. Mô hình ví dụ
Đâ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.
3. Tạo project MathLibrary
- 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;
}
}
4. Tạo project MathWebApp
- 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>
5. Tạo project MavenParent
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
6. Khai báo Maven quan hệ giữa các Project
Đâ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>
Các hướng dẫn Maven
- Cài đặt Maven cho Eclipse
- Hướng dẫn sử dụng Maven cho người mới bắt đầu
- Quản lý các phụ thuộc trong Maven
- Xây dựng dự án nhiều Module với Maven
- Chạy ứng dụng Java web Maven trên Tomcat Maven Plugin
- Chạy ứng dụng Java Web Maven trên Jetty Maven Plugin
- Cài đặt Tycho cho Eclipse
- Tạo dự án Java OSGi với Maven và Tycho
- Tạo Maven Web App Project rỗng trong Eclipse
- Tương tác OSGi và AspectJ
Show More