Mastering Maven: A Developer’s Handbook for Parent and Child Projects

Mastering Maven: A Developer’s Handbook for Parent and Child Projects

Introduction

Welcome to the next instalment in our Maven series, where we continue our exploration of this powerful project management tool. In this article, we’ll dive deeper into Maven’s capabilities by delving into the concept of parent and child projects/modules. By understanding and effectively using parent-child project relationships, you’ll significantly enhance your software development efficiency.

Why Do We Need Parent-Child Projects?

Before we proceed, let’s take a moment to understand why parent-child projects are essential:

  • Modular Development with Maven: Achieve modularity by breaking down large software systems into smaller, manageable components or modules. This promotes code reusability and simplifies maintenance.

  • Streamlined Dependency Management: Maven simplifies the management of dependencies between modules. Each child module can specify its dependencies, ensuring that only the necessary components are included.

  • Consistent Builds: Parent-child projects ensure that all modules within a project share a consistent build process. This consistency is invaluable when working on complex systems.

Creating a Parent Project

Let’s start by creating a parent project. Execute the following command to generate a new project and set up the parent POM:

mvn archetype:generate -DgroupId=tech.anilgulati -DartifactId=parent-project -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

Make sure to replace tech.anilgulati with your desired group ID. This command generates the basic structure for your parent project.

Configuring the Parent POM Packaging to pom

In the generated pom.xml of your parent project, find the <packaging> element and change its value to pom. This step is crucial because the parent project doesn't produce any output of its own; it acts as a container for child modules.

<packaging>pom</packaging>

Creating Submodules with Consistent Group ID

Now, let’s create three submodules to illustrate how they work. Please note that the group ID should remain the same for consistency:

UserManagement: This module handles user-related functionality.

mvn archetype:generate -DgroupId=tech.anilgulati -DartifactId=user-management -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

ProductCatalog: This module manages product information.

mvn archetype:generate -DgroupId=tech.anilgulati -DartifactId=product-catalog -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

OrderProcessing: This module is responsible for processing customer orders.

mvn archetype:generate -DgroupId=tech.anilgulati -DartifactId=order-processing -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

Configuring Output Types for Modules

For our project, we’ll configure one submodule to produce a WAR (Web Application Archive) file. To do this, edit the pom.xml of the order-processing module and adjust the <packaging> element as needed.

<packaging>war</packaging>

Adding WAR Plugin for the WAR Module

In the pom.xml of the order-processing module, you should also include the WAR plugin to configure your WAR file effectively. Add the following plugin configuration within the <build> section:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.3.2</version> <!-- Adjust the version if needed -->
        </plugin>
    </plugins>
</build>

Generating Output Files

To generate output files for individual modules, navigate to the module directory (e.g., order-processing) and use the following command:

mvn package

To generate outputs for all modules at once, execute the same command from the parent project’s directory. Maven will build each module in the correct order, taking care of dependencies.

Understanding mvn clean Impact

Using mvn clean at the module level removes the target folder and cleans up the module's workspace. At the parent level, it does the same for all child modules. This is handy for ensuring that your builds start fresh, especially when modifications have been made.

To solidify your understanding, let’s try an interactive exercise. Open your terminal and navigate to the parent-project directory. Run the following command to clean the entire project:

mvn clean

Observe how Maven cleans all modules, ensuring a fresh start for your builds.

Conclusion

Mastering parent-child projects in Maven not only enhances your software development skills but also opens doors to exciting career opportunities. As organizations increasingly adopt modular development practices, your expertise in Maven’s parent-child project structure will make you a valuable asset. You’ll be well-prepared to tackle complex software projects with confidence and efficiency, setting you on a path to success in the software development industry.

Enjoyed This Article?

If you enjoy reading this post, got help, knowledge through it, and want to support my efforts please clap this article and follow.
To explore more of my work, visit my portfolio at
anilgulati.com