betacode

Построить Multiple Module Project с Maven

  1. Введение
  2. Модель примера
  3. Создать project MathLibrary
  4. Создать project MathWebApp
  5. Создать project MavenParent
  6. Объявить отношения Maven между Project
  7. Упаковать модули

1. Введение

Статья основана на:
  • Eclipse 4.6 (NEON)

Вы смотрите статью повышенного Maven. Если вы только начали использовать Maven, вам следует посмотреть инструкцию по использованию Maven для начинающих (Hello world Maven) по ссылке:

2. Модель примера

Примерный модель данной статьи
Цель инструкции:
  1. Как один Модуль использует другой Модуль в Maven
  2. Упаковка различных Модулей с помощью Maven (в:jar, war).
MathWebApp: это WebApp project
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>

7. Упаковать модули

Правый клик на project MavenParent выбрать:
  • Run As/Maven install.
Результат: