6.2. The Simple Parent Project
A multi-module project is defined by a parent POM referencing one or
more submodules. In the simple-parent/
directory, you will find the
parent POM (also called the top-level POM) in
simple-parent/pom.xml
. See simple-parent Project POM.
simple-parent Project POM.
<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.sonatype.mavenbook.multi</groupId>
<artifactId>simple-parent</artifactId>
<packaging>pom</packaging>
<version>1.0</version>
<name>Multi Chapter Simple Parent Project</name>
<modules>
<module>simple-weather</module>
<module>simple-webapp</module>
</modules>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Notice that the parent defines a set of Maven coordinates: the
groupId
is org.sonatype.
mavenbook.multi
, the artifactId
is
simple-parent
, and the version
is 1.0
. The parent project
doesn’t create a JAR or a WAR like our previous projects; instead, it
is simply a POM that refers to other Maven projects. The appropriate
packaging for a project like simple-parent
that simply provides a
Project Object Model is pom
. The next section in the pom.xml
lists
the project’s submodules. These modules are defined in the modules
element, and each module
element corresponds to a subdirectory of the
simple-parent
directory. Maven knows to look in these directories
for pom.xml
files, and it will add submodules to the list of Maven
projects included in a build.
Lastly, we define some settings which will be inherited by all
submodules. The simple-parent
build configuration configures the
target for all Java compilation to be the Java 5 JVM. Since the
compiler plugin is bound to the lifecycle by default, we can use the
pluginManagement
section do to this. We will discuss pluginManagement
in more detail in later chapters, but the separation between providing
configuration to default plugins and actually binding plugins is much
easier to see when they are separated this way. The dependencies
element adds JUnit 3.8.1 as a global dependency. Both the build
configuration and the dependencies are inherited by all
submodules. Using POM inheritance allows you to add common
dependencies for universal dependencies like JUnit or Log4J.