Difference Between Super, Simplest, and Effective POM
Last Updated :
23 Jul, 2025
POM (Project Object Model) is the fundamental unit in Maven. POM is an XML file containing project information and configuration parameters that Maven will use to build the project. It includes default values for most projects.
In this article we will learn the difference between Super, Simplest, and Effective POM.
POM Example:
XML
<project xmlns="https://maven.apache.org/POM/4.0.0"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example.newproject</groupId>
<artifactId>new-artifact</artifactId>
<version>1.1</version>
<name>New Project</name>
<description>A description of the new project</description>
<url>http://www.example.com/newproject</url>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>https://www.apache.org/licenses/LICENSE-2.0.html</url>
<distribution>repo</distribution>
</license>
</licenses>
<developers>
<developer>
<id>dev1</id>
<name>Developer One</name>
<email>[email protected]</email>
</developer>
</developers>
</project>
Explanation:
This POM file defines a Maven project with the group ID "com.example.newproject" and artifact ID "new-artifact" at version "1.1". It includes metadata such as the project name "New Project," a description, and the project URL. Additionally, it specifies the Apache License 2.0 and lists one developer with the ID "dev1", name "Developer One," and email "[email protected]".
Super POM
Super POM is Maven's default POM and every POM inherits from a parent or default. This comprises values inherited by default. Maven uses an effective POM (configuration from super pom plus project configuration) to carry out essential goals.
Configuration of Dependencies, Repositories, Plugin, and Build in Super POM
XML
<project>
<modelVersion>4.0.0</modelVersion>
<repositories>
<repository>
<id>central-repo</id>
<name>Main Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>plugin-repo</id>
<name>Plugin Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
<build>
<directory>${project.basedir}/build</directory>
<outputDirectory>${project.build.directory}/classes</outputDirectory>
<finalName>${project.artifactId}-${project.version}</finalName>
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
</resource>
</resources>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>3.1.1</version>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.6.1</version>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.6.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
<profiles>
<profile>
<id>release-profile</id>
<activation>
<property>
<name>release</name>
<value>true</value>
</property>
</activation>
<build>
<plugins>
<plugin>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
Explanation:
This POM file configures a Maven project by specifying repositories for dependencies and plugins, customizing build directories, and managing plugins for build tasks. It also defines a release profile that activates based on a property, enabling specific plugins for creating source and Javadoc JARs during the release build process.
Simplest POM
The simplest POM is the one you define in your Maven project. To declare a POM, you must specify at least four elements: model version, groupId, artifactId, and version. The simplest POM will inherit all of the configurations from the super POM.
Configuration of Dependencies, Repositories, Plugin, and Build in Simplest POM
XML
<project xmlns="https://maven.apache.org/POM/4.0.0"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://maven.apache.org/POM/4.0.0
https://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example.myapp</groupId>
<artifactId>myapp-core</artifactId>
<packaging>jar</packaging>
<version>1.1.0</version>
<name>MyApp Core</name>
<url>https://repo.maven.apache.org/maven2</url>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.7.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
</dependencies>
</project>
Explanation:
This POM file configures a Maven project with essential details such as the group ID, artifact ID, packaging type, and version. It includes the project name and URL for the Maven central repository. The dependencies section specifies two dependencies: JUnit for testing (test scope) and Apache Commons Lang for utility functions.
Effective POM
Effective POM combines all the default settings from the super POM file with the configuration specified in our POM application. Maven does not just employ Simplest POM (pom.xml) to generate our project. It requires all of the default settings to compile. It will use the default setup until the developer overwrites these settings.
Configuration of Dependencies, Repositories, Plugins, and Build-in Effective POM
XML
<project xmlns="https://maven.apache.org/POM/4.0.0"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.geeksforgeeks.project</groupId>
<artifactId>effective-pom</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<name>Effective POM Project</name>
<description>A project demonstrating an effective POM configuration</description>
<url>http://example.com/effective-pom</url>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>https://www.apache.org/licenses/LICENSE-2.0.html</url>
<distribution>repo</distribution>
</license>
</licenses>
<developers>
<developer>
<id>dev1</id>
<name>Developer One</name>
<email>[email protected]</email>
<roles>
<role>developer</role>
</roles>
</developer>
</developers>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.8</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>central</id>
<url>https://repo.maven.apache.org/maven2</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>https://repo.maven.apache.org/maven2</url>
</pluginRepository>
</pluginRepositories>
</project>
Explanation:
This POM file defines a Maven project with essential details such as group ID, artifact ID, version, packaging type, name, and description. It specifies the Apache License, version 2.0, and includes one developer with the role of "developer". The dependencies section includes spring-core for core Spring functionality and junit for testing. The build section configures three Maven plugins: maven-compiler-plugin for Java compilation, maven-surefire-plugin for running tests, and maven-jar-plugin for packaging the project into a JAR file. The repositories section includes the central Maven repository for both dependencies and plugins.
Difference Between Super, Simplest, and Effective POM
Super POM
| Simplest POM
| Effective POM
|
|---|
Super POM is Maven's default POM.
| The simplest POM is defined in your Maven project.
| Effective POM combines all default settings from super POM file.
|
Super POM is part of the Maven installation and it depends on the Maven version.
| Super POM can not depend on the Maven version.
| Effective POM does not depend on the Maven version.
|
The super POM highlights the POM, interpolation, inheritance, and active profiles.
| The simplest POM is also used for interpolation and active profiles.
| The effective plan also aims to highlight the POM, interpolation, inheritance, and active profiles.
|
The Super POM does not specify a groupId, artifactId, and version.
| The simplest POM specifies a groupId, artifactId, and version.
| The Effective POM also creates a groupId, artifactId, and version.
|
Explore
Java Enterprise Edition
Multithreading
Concurrency
JDBC (Java Database Connectivity)
Java Frameworks
JUnit