Layer 8Ehrlicher Tech-Support
SoftwareSchweregrad: LästigNon-resolvable parent POM

Maven: Non-resolvable parent POM trotz Eltern-POM daneben

Maven findet das Eltern-POM nicht, obwohl es daneben liegt. Gesucht wird nur unter relativePath, Vorgabe ../pom.xml, und nur bei passender Version.

Aufwand:
ca. 15 Min.
Voraussetzung:
Ein Terminal mit mvn, Die pom.xml des Moduls und des Elternprojekts, Lesezugriff auf das lokale Repository unter ~/.m2/repository
Gilt für:
Apache Maven 3.9.12 (POM-Referenz, zuletzt veröffentlicht 16.10.2026; Maven-Model-Referenz 3.9.12), Element parent mit relativePath

Das Symptom

mvn bricht ab, bevor es überhaupt zu kompilieren beginnt. Die Meldung spricht von einem Non-resolvable parent POM und nennt groupId, artifactId und version eines Elternprojekts, das Maven weder im Dateisystem noch im lokalen noch im entfernten Repository finden konnte. Das Elternprojekt liegt aber direkt daneben, die pom.xml ist da, und beim Kollegen baut es.

Gern tritt der Fehler nach einem Release auf, nach dem Umbau einer Ordnerstruktur, beim Auschecken eines einzelnen Moduls in der CI oder wenn jemand den parent-Block aus einem anderen Projekt kopiert hat.

Die „Layer 8“-Wahrheit

Maven sucht das Elternprojekt an genau drei Stellen, in fester Reihenfolge, und die Model-Referenz schreibt sie auf: „Maven looks for the parent POM first in this location on the filesystem, then the local repository, and lastly in the remote repo.“ Die Stelle im Dateisystem ist das Feld relativePath, und für dessen Vorgabe gilt: „If not specified, it defaults to ../pom.xml.“ Ein Modul, dessen Elternprojekt eine Ebene höher liegt, braucht also nichts anzugeben. Jede andere Anordnung braucht den Pfad ausdrücklich.

Der tückische Teil steht einen Satz weiter. Die Datei unter relativePath wird nur akzeptiert, wenn sie zu den Koordinaten passt: „However, the group ID, artifact ID and version are still required, and must match the file in the location given or it will revert to the repository for the POM.“ Stimmt die Version im parent-Block nicht mit der Version in der gefundenen Datei überein, verwirft Maven die Datei und fragt die Repositorys. Dort liegt die alte Version meist nicht, weil Elternprojekte in Multi-Modul-Builds selten einzeln installiert werden. Das Ergebnis ist die Meldung, die behauptet, das Elternprojekt sei unauffindbar, obwohl es im Nachbarordner liegt. Es liegt dort, es ist nur nicht das, was gesucht wird.

Die Referenz stuft die Dateisystemsuche als Entwicklungshilfe ein: „This feature is only for enhancing the development in a local checkout of that project.“ Daraus folgt auch, wann man sie abschaltet: „Set the value to an empty string in case you want to disable the feature and always resolve the parent POM from the repositories.“ Ein leerer relativePath ist richtig für ein firmenweites Parent-POM, das als eigenes Artefakt veröffentlicht wird. In einem Projekt, dessen Elternprojekt nie ein Repository sieht, ist derselbe leere Eintrag die Ursache des Fehlers, den er angeblich vermeiden sollte.

Ein Detail, das Platzhalter-Freunde trifft: Die Model-Referenz vermerkt zum parent-Element, dass seine Kinder nicht interpoliert werden und als Literale angegeben werden müssen. Eine Version, die über eine Property gesetzt wird, kommt im parent-Block nicht an.

Die Prüfung dauert eine Minute: parent-Block des Moduls neben die Kopfzeilen des Eltern-POM legen, drei Werte vergleichen, Pfad prüfen. Erst wenn alles stimmt und die Meldung bleibt, lohnt der Blick auf Repositorys, Spiegel und Netz.

Die echte, verifizierte Lösung

1000 % faktenbasiert. Jeder Befehl ist real, jeder Pfad existiert. Schritt für Schritt:

  1. 1.

    Koordinaten im parent-Block mit dem Eltern-POM abgleichen

    Die Fehlermeldung nennt groupId, artifactId und version des gesuchten Elternprojekts. Diese drei Werte müssen laut Referenz mit der Datei unter relativePath übereinstimmen, sonst wird die Datei ignoriert. Ein Blick in beide Dateien genügt; häufigster Fehler ist eine Versionsnummer, die nach einem Release im Elternprojekt erhöht, in den Modulen aber nicht nachgezogen wurde. Zu beachten: Die Werte im parent-Block müssen laut Model-Referenz als Literale stehen, Platzhalter werden dort nicht aufgelöst.

    grep -A4 "<parent>" pom.xml
    grep -m1 -A3 "<groupId>" ../pom.xml
    
  2. 2.

    Pfad prüfen

    Ohne Angabe sucht Maven unter ../pom.xml, also eine Ebene über dem Modul. Liegt das Elternprojekt woanders, etwa in einer flachen Struktur neben dem Modul oder zwei Ebenen höher, gehört der Pfad ausdrücklich in relativePath. Der Pfad ist relativ zum Ordner der Modul-pom.xml und darf auf einen Ordner zeigen, in dem Maven dann die pom.xml erwartet, oder direkt auf die Datei.

    ls -l ../pom.xml
    
  3. 3.

    relativePath im Modul setzen

    Zeigt der Pfad an die richtige Stelle und stimmen die Koordinaten, nimmt Maven die Datei aus dem Dateisystem und braucht kein Repository. Bei einem Elternprojekt zwei Ebenen höher lautet der Eintrag ../../pom.xml. Nach der Änderung das Modul erneut bauen; die Meldung verschwindet, ohne dass das Elternprojekt installiert werden muss.

    <parent>
      <groupId>de.example</groupId>
      <artifactId>firmen-parent</artifactId>
      <version>2.0</version>
      <relativePath>../../pom.xml</relativePath>
    </parent>
    
  4. 4.

    Repository-Weg bewusst wählen

    Soll das Elternprojekt nicht aus dem Dateisystem, sondern aus einem Repository kommen, muss es dort auch liegen: lokal durch mvn install im Elternprojekt, entfernt durch Veröffentlichung. Dann darf relativePath leer sein, wie es die Referenz für diesen Fall beschreibt. Wer beides mischt, Dateisystem für die Entwicklung und Repository für die CI, sollte sicherstellen, dass die veröffentlichte Version mit der im parent-Block identisch ist, sonst bauen Entwicklerrechner und CI gegen verschiedene Eltern.

    cd ../firmen-parent && mvn install -N
    

Häufige Fragen (FAQ)

?Wo sucht Maven das Eltern-POM, und in welcher Reihenfolge?

Die Maven-Model-Referenz beschreibt das Feld relativePath so: „The relative path of the parent pom.xml file within the check out. If not specified, it defaults to ../pom.xml. Maven looks for the parent POM first in this location on the filesystem, then the local repository, and lastly in the remote repo.“ Drei Stationen also: erst die Datei im Dateisystem, dann das lokale Repository, zuletzt das entfernte. Der Fehler Non-resolvable parent POM bedeutet, dass alle drei Stationen leer ausgingen. Das Eltern-POM im Nachbarordner zählt nur, wenn es an der angegebenen Stelle liegt und die richtigen Koordinaten trägt.

?Das Eltern-POM liegt doch unter ../pom.xml. Warum nimmt Maven es nicht?

Weil die Datei zwar gefunden wurde, aber nicht passt. Die Referenz ist eindeutig: „However, the group ID, artifact ID and version are still required, and must match the file in the location given or it will revert to the repository for the POM.“ Typischer Fall: Das Elternprojekt wurde auf Version 2.0 gehoben, im Modul steht im parent-Block noch 1.5. Dann greift Maven stillschweigend auf die Repositorys zurück, wo es 1.5 nicht gibt, weil die nie installiert oder veröffentlicht wurde. Die Fehlermeldung nennt die gesuchten Koordinaten; der Abgleich mit dem Eltern-POM zeigt die Abweichung sofort.

?Mein Elternprojekt liegt nicht im Ordner darüber. Was dann?

Dann muss relativePath auf die Datei zeigen. Die Referenz nennt genau diesen Zweck: „relativePath allows you to select a different location, for example when your structure is flat, or deeper without an intermediate parent POM.“ Die POM-Referenz ergänzt, das Element sei nicht erforderlich, diene aber als Hinweis an Maven, zuerst dort zu suchen, bevor lokales und entferntes Repository an der Reihe sind. Ohne Angabe gilt ../pom.xml; liegt das Elternprojekt woanders, findet Maven es im Dateisystem nicht und ist auf die Repositorys angewiesen.

?Soll ich relativePath leer setzen, wie es manche Anleitungen empfehlen?

Nur, wenn das Eltern-POM wirklich aus einem Repository kommen soll, etwa ein firmenweites Parent-POM, das separat veröffentlicht wird. Die Referenz sagt dazu: „Set the value to an empty string in case you want to disable the feature and always resolve the parent POM from the repositories.“ Sie stuft die Dateisystemsuche als Hilfe für die Entwicklung in einem lokalen Checkout ein. Ein leeres relativePath in einem Multi-Modul-Projekt, dessen Elternprojekt nie installiert wird, erzeugt den Fehler erst recht.

Belege

Diese Seite ist gegen die folgenden Primärquellen geprüft – Hersteller, Standard oder Gesetzestext. Wer es nicht glaubt, muss es nicht: Da steht, wo es nachzulesen ist.

Zuletzt geprüft am . Dokumentation altert – ein Datum daneben ist der einzige ehrliche Umgang damit.

Auch zu finden unter

Verwandte Fehler

SWLästigCould not resolve dependencies

Maven: Could not resolve dependencies

Maven findet eine Abhängigkeit nicht? Meist fehlt das Repository, ein Proxy blockt, oder ein halb geladenes Paket verstopft den Cache.