Построить Multiple Module Project с Maven
View more Tutorials:
Статья основана на:
-
Eclipse 4.6 (NEON)
Вы смотрите статью повышенного Maven. Если вы только начали использовать Maven, вам следует посмотреть инструкцию по использованию Maven для начинающих (Hello world Maven) по ссылке:
Примерный модель данной статьи

Цель инструкции:
- Как один Модуль использует другой Модуль в Maven
- Упаковка различных Модулей с помощью Maven (в:jar, war).
MathWebApp: это WebApp project
MathLibrary: это Project библиотеки, содержит утилитарные классы используемые MathWebApp.
MavenParent: это project выполняющий задание упаковки 2 высших project, это родительский модуль MavenParent упаковывает:
MathLibrary: это Project библиотеки, содержит утилитарные классы используемые MathWebApp.
MavenParent: это project выполняющий задание упаковки 2 высших project, это родительский модуль MavenParent упаковывает:
- Упаковывает MathLibary в file jar
- Упаковывает MathWebApp в file war.
- File/New/Other...

Это простой Project, нам не нужно выбирать архетип (archetype) Maven.
Выбрать:
Выбрать:
- Create a simple project (skip archetype selection)

Ввод:
- Group Id: org.o7planning
- Artifact Id: MathLibrary
- Packaging: jar
Пропустить информацию родительского модуля.

Project создан:

Создать 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..


Выбрать архетип (archetype) maven-archetype-webapp. Eclipse создаст Project Maven имеющий структуру веб приложения.

Ввод:
- Group Id: org.o7planning
- Artifact Id: MathWebApp
- Version: 0.0.2-SNAPSHOT
- Package: org.o7planning.mathwebapp

Это скриншот созданного project MathWebApp. Вы можете увидеть ошибку где-ибудет в Project, не беспокойтесь, это потому что вы не добавили библиотеку Servlet.

Eclipse может создать project с неправильной структурой. Вам нужно перепроверить.

- Open file pom.xml

Добавить:
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>
Как показано ниже:

Теперь ошибки нет:

Продолжить настройку maven, MathWebApp используя 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>
Исправить file index.jsp используя class MathUtils в 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>
Создать обычный Java project.
- File/New/Other..



Правый клик на созданный project MavenParent, и ковертировать (convert) в Maven Project.

Ввод:
- Group Id: org.o7planning
- Artifact Id: MavenParent
- Version: 1.0.0-SNAPSHOT
- Packaging: pom


Картина показывает вкратце конфигурацию Maven, отношение между модулями (Project).

Открыть file pom.xml 2-х project MathLibrary & MathWebApp добавить:
<parent> <groupId>org.o7planning</groupId> <artifactId>MavenParent</artifactId> <version>1.0.0-SNAPSHOT</version> <relativePath>../MavenParent/pom.xml</relativePath> </parent>
Открыть file pom.xml у MavenParent добавить:
<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>
Правый клик на project MavenParent выбрать:
- Run As/Maven install.

Результат:

