How to create a Multi-Module Project in Maven

  • 4.1/5
  • 4767
  • Jul 20, 2024

A multi-module project in Maven is built from an aggregator POM that manages a group of sub-modules.

In most cases, the aggregator is located in the project's root directory and must have packaging of type "pom".

Let's create a maven project "rabbit-mq-java" having two modules "producer" and "consumer".

mvn archetype:generate -DgroupId=com.codeburps -DartifactId=rabbit-mq-java -DinteractiveMode=false

Once the parent project is generated, we have to open the pom.xml file located in the parent's directory and add the packaging as "pom":

<packaging>pom</packaging>

The parent maven project is of packaging type "pom" and acts as an aggregator - it won't produce other artifacts.

cd rabbit-mq-java
mvn archetype:generate -DgroupId=com.codeburps -DartifactId=producer -DinteractiveMode=false
mvn archetype:generate -DgroupId=com.codeburps -DartifactId=consumer -DinteractiveMode=false

The information about all the submodules will be added in the parent-project's pom.xml:

    <modules>
        <module>producer</module>
        <module>consumer</module>
    </modules>

The information about the parent-project will be added in each of the submodules' pom.xml:

    <parent>
        <groupId>com.codeburps</groupId>
        <artifactId>rabbit-mq-java</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

In order to package, add the following properties in the parent-project's "pom.xml":

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>

By building the project through the aggregator POM, each project that has a packaging type different from "pom" will result in a built archive file.

% mvn package

Child projects are independent maven projects but inherit properties from parent project.

Index
Create and Run a React app and JSX Basics

14 min

How to Download AWS S3 Content Using AWS CLI on a Mac Machine

2 min

Load Testing using Locust.io (Open-source)

2 min

How to create a Multi-Module Project in Maven

2 min

Building RESTful APIs with Node.js, Express & MongoDB

14 min

Docker commands every developer should know

13 min

AWS S3 integration with Spring Boot (AWS S3 + Spring Boot)

14 min