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

Цель инструкции:
- Как один Модуль использует другой Модуль в 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.
3. Создать project MathLibrary
- 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;
}
}
4. Создать project MathWebApp
- 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>
5. Создать project MavenParent
Создать обычный Java project.
- File/New/Other..



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

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


6. Объявить отношения Maven между Project
Картина показывает вкратце конфигурацию 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>
Руководства Maven
- Установите Maven для Eclipse
- Руководство Maven для начинающих
- Maven управляет зависимостями
- Построить Multiple Module Project с Maven
- Запускать веб-приложение Java Maven в Tomcat Maven Plugin
- Запуск веб-приложения Java Maven в Jetty Maven Plugin
- Установите Tycho для Eclipse
- Создайте проект Java OSGi с Maven и Tycho
- Создайте пустой проект Maven Web App в Eclipse
- Интеграция OSGi и AspectJ
Show More