apache/maven · critical · IllegalStateException

The super POM {} was not found, please verify the integrity

Error message

The super POM {} was not found, please verify the integrity of your Maven installation

What it means

Maven loads the super POM (the implicit parent of every model) from the classpath resource /org/apache/maven/model/pom-<version>.xml shipped inside the maven-impl artifact. If the resource is absent, DefaultSuperPomProvider throws IllegalStateException: the running installation is incomplete or its classpath mixes incompatible artifacts. The message asks the user to verify the integrity of the Maven installation.

Source

Thrown at impl/maven-impl/src/main/java/org/apache/maven/impl/DefaultSuperPomProvider.java:61

     * The cached super POM, lazily created.
     */
    private static final Map<String, Model> SUPER_MODELS = new ConcurrentHashMap<>();

    @Inject
    public DefaultSuperPomProvider(ModelProcessor modelProcessor) {
        this.modelProcessor = modelProcessor;
    }

    @Override
    public Model getSuperPom(String version) {
        return SUPER_MODELS.computeIfAbsent(Objects.requireNonNull(version), v -> readModel(version, v));
    }

    private Model readModel(String version, String v) {
        String resource = "/org/apache/maven/model/pom-" + v + ".xml";
        URL url = getClass().getResource(resource);
        if (url == null) {
            throw new IllegalStateException("The super POM " + resource + " was not found"
                    + ", please verify the integrity of your Maven installation");
        }
        try (InputStream is = url.openStream()) {
            String modelId =
                    "org.apache.maven:maven-api-impl:" + getImplementationVersion(getClass()) + ":super-pom-" + version;
            return modelProcessor.read(XmlReaderRequest.builder()
                    .modelId(modelId)
                    .location(url.toExternalForm())
                    .inputStream(is)
                    .strict(false)
                    .build());
        } catch (IOException e) {
            throw new IllegalStateException(
                    "The super POM " + resource + " is damaged"
                            + ", please verify the integrity of your Maven installation",
                    e);
        }
    }

View on GitHub (pinned to e4093d4e12)

Solutions

  1. Inspect the maven-impl jar: unzip -l maven-impl-*.jar | grep 'pom-.*\\.xml' and confirm the needed version is present
  2. Resolve classpath conflicts (mvn dependency:tree | grep maven-impl) so only the matching version loads
  3. Reinstall or repair the Maven distribution if its jar is missing resources
  4. In embedded setups, pin one maven-impl version explicitly
Defensive patterns

Strategy: validation

Validate before calling

String modelVersion = "4.0.0";
URL superPom = getClass().getResource("/org/apache/maven/model/pom-" + modelVersion + ".xml");
if (superPom == null) {
    throw new IllegalStateException(
        "Maven installation has no super POM for model " + modelVersion
        + "; fix maven-impl on the classpath");
}
// safe to build models

Prevention

When it happens

Trigger: Model building calls getSuperPom(version) and the jar containing DefaultSuperPomProvider lacks a pom-<version>.xml for the requested model version: broken installation, shaded or pruned jar, or a conflicting older maven-impl winning on the classpath.

Common situations: Corrupted Maven distribution; applications embedding Maven with dependency conflicts on maven-impl; custom assemblies that strip resource files; building a model whose modelVersion has no super POM in the running Maven version.

Related errors


AI-assisted analysis of apache/maven@e4093d4e12 (2026-08-21). Data as JSON: /api/errors/462d97a5cd50903d. Report an issue: GitHub.