Difference Between Super, Simplest, and Effective POM

Last Updated : 24 Apr, 2026

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. Different types of POM—Super POM, Simplest POM, and Effective POM—help define how a Maven project is structured and executed.

  • Super POM provides default configuration that is inherited by all Maven projects.
  • Simplest POM contains only basic project details required to create a Maven project.
  • Effective POM shows the final combined configuration after applying all defaults and user settings.

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>dev1@google.com</email>
        </developer>
    </developers>
</project>

Explanation: This POM defines a Maven project with group ID com.example.newproject, artifact ID new-artifact, and version 1.1, including project metadata (name, description, URL), Apache License 2.0, and developer details.

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.

  • Apache Maven provides Super POM as the default configuration inherited by all Maven projects.
  • It contains standard settings like repositories, plugins, and build configurations.
  • Super POM combines with the project’s POM to form the Effective POM used during build execution.

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 configures repositories, build settings, and plugins, and defines a release profile that activates via a property to generate source and Javadoc JARs during the build.

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.

  • Apache Maven requires the simplest POM to include basic elements like modelVersion, groupId, artifactId, and version.
  • It is a user-defined POM with minimal configuration for creating a project.
  • It inherits default settings and 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 defines basic project details (group ID, artifact ID, version, packaging, name, URL) and includes dependencies for JUnit (testing) and Apache Commons Lang (utilities).

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.

  • Apache Maven generates the Effective POM by combining Super POM defaults with the project’s POM configuration.
  • It represents the final build configuration used by Maven during project execution.
  • Default settings are applied automatically unless the developer overrides them.

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>dev1@google.com</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 defines project details, Apache License 2.0, and developer info, includes dependencies (Spring Core and JUnit), configures build plugins (compiler, surefire, jar), and uses Maven Central for 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.

Depends on the Maven version as it is defined by Maven itself.

Depends on the Maven version as it is generated using the version-specific Super POM.

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.

Comment
Article Tags:

Explore