Maven: Nicht auflösbares Eltern-POM

101

Ich habe mein Maven-Projekt als 1 Shell-Projekt und 4 untergeordnete Module eingerichtet. Wenn ich versuche, die Shell zu bauen. Ich bekomme:

[INFO] Scanning for projects...
[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]   
[ERROR] The project module1:1.0_A0 (C:\module1\pom.xml) has 1 error
[ERROR] Non-resolvable parent POM: Failure to find shell:pom:1.0_A0 in http://nyhub1.ny.ssmb.com:8081/nexus/content/repositories/JBoss/ was cached in the local repository, resolution will not be reattempted until the update interval of jboss has elapsed or updates are forced and 'parent.relativePath' points at wrong local POM @ line 5, column 11 -> [Help 2]

Wenn ich versuche, ein einzelnes Modul zu erstellen, wird der gleiche Fehler angezeigt. Ersetzen Sie nur Modul1 durch ein beliebiges Modul.

Lassen Sie sie alle die Eltern in ihren Poms referenzieren.

<parent>
    <artifactId>shell</artifactId>
    <groupId>converter</groupId>
    <version>1.0_A0</version>
</parent>

Hier sind die relevanten Teile des Shell Pom:

<groupId>converter</groupId>
<artifactId>shell</artifactId>
<version>1.0_A0</version>
<packaging>pom</packaging>
<name>shell</name>


<modules>
    <module>module1</module>
    <module>module2</module>
    <module>module3</module>
    <module>module4</module>
</modules>
Wille
quelle
1
Wenn jemand interessiert ist, hat das Hinzufügen <relativePath>..</relativePath>unter <parent></parent>für mich funktioniert.
Captan
2
Führen Sie dies ausmvn install -N & mvn install
Se Song
Der relative Pfad ist für nicht konforme Projekte keine "Lösung", wenn auf die Erwartung ein POM im übergeordneten Ordner des Moduls zugegriffen werden soll.
Rick O'Shea
In meinem Fall lag es an der fehlerhaften Eingabe in der Datei pom.xml.
Oleksii Kyslytsyn
Alle möglichen Probleme zusammengefasst: stackoverflow.com/a/62704660/6172857
Sumit Badsara

Antworten:

94

Nur als Referenz.

Die Freuden von Maven.

Das Setzen des relativen Pfads der Module zu ../pom.xml löste das Problem.

Das parentElement verfügt über ein relativePathElement, das Sie auf das Verzeichnis des übergeordneten Elements verweisen müssen. Der Standardwert ist..

Wille
quelle
17
Ja. Die Verwendung von Maven setzt voraus, dass Sie wissen, was Sie tun. Versuch und Irrtum bringen Sie nicht weit. Auf der anderen Seite gibt es mehrere gute Referenzen. Dies ist einer .
Nicola Musatti
6
Also hast du das <relativePath>..</relativePath>unter hinzugefügt <parent></parent>?
Octavian
Danke, ich habe es eine Weile versucht, um das Problem zu lösen. Ich nahm den relativen Weg von ../pom.xmlnach ../<parent folder>/pom.xml.
Mario Kurzweil
Das Setzen des <relativePath> würde das Problem nicht unbedingt lösen, wenn Sie auf ein privates Repository verweisen. Suchen Sie nach einer Antwort von Tomáš Záluský, um eine detaillierte Erklärung zu erhalten.
Gi1ber7
Ich versuche, meine Haupt-POM-Datei auf eine andere (für Tests) im selben Verzeichnis (dasselbe Projekt) zu erweitern. Dies löst diesen Fehler jedoch nicht. Irgendeine Idee, wie man das behebt?
Praneeth Peiris
38

Es kann auch behoben werden, indem die richtige settings.xmlDatei in das ~/.m2/Verzeichnis gestellt wird.

user1747134
quelle
3
Genau das hat mein Problem gelöst, danke !!! Aber nicht indem Sie es in ein Verzeichnis legen, sondern indem Sie Eclipse in den Einstellungen - Maven - Benutzereinstellungen darauf verweisen.
Gehirn
Mein Problem wurde auch gelöst. Ich muss nur sicherstellen, dass die Einstellungen auch richtig konfiguriert sind maven.repo.
Saran
21

Ein alternativer Grund könnte auch sein, dass das übergeordnete Artefakt aus einem Repository stammt, auf das nicht zugegriffen werden kann pom.xml, normalerweise aus einem privaten Repository. Die Lösung bestand darin, dieses Repository bereitzustellen in pom.xml:

<repositories>
    <repository>
        <id>internal-repo</id>
        <name>internal repository</name>
        <url>https://my/private/repo</url>
        <layout>default</layout>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

In meinem Fall war das Problem aufgrund von Eclipse noch komplizierter: Das Repository war nur in einem speziellen Profil ( <profiles><profile><id>activate-private-repo</id><repositories>...) aktiv, und die Maven-GUI in Eclipse erlaubte nicht, dieses Profil über eine Ctrl+Alt+PVerknüpfung festzulegen .

Die Lösung bestand darin, das Repository vorübergehend (unbedingt) außerhalb des Profils zu deklarieren, das Alt+F5Maven Update-Projekt zu starten , das Profil zu aktivieren und die Repository-Deklaration wieder in das Profil aufzunehmen. Dies ist eher ein Eclipse-Fehler, kein Maven-Fehler.

Tomáš Záluský
quelle
Gleiche Situation! Privates Repo nicht zum Pom hinzugefügt.
LoranceChen
4

Nicht auflösbares übergeordnetes POM: Dies bedeutet, dass Sie das übergeordnete Repo nicht auflösen können.

Im Debug-Modus abschneiden:

[DEBUG] Reading global settings from **/usr/local/Cellar/maven/3.5.4/libexec/conf/settings.xml**
[DEBUG] **Reading user settings from /Users/username/.m2/settings.xml**
[DEBUG] Reading global toolchains from /usr/local/Cellar/maven/3.5.4/libexec/conf/toolchains.xml
[DEBUG] Reading user toolchains from /Users/username/.m2/toolchains.xml
[DEBUG] Using local repository at /Users/username/.m2/repository
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10.0 for /Users/username/.m2/repository
[INFO] Scanning for projects...
[ERROR] [ERROR] Some problems were encountered while processing the POMs:

Weil das Eltern-Repo nicht Teil des Maven Central ist. Die Lösung besteht darin, in ~ m2 / eine settings.xml anzugeben, um das Ergebnis des übergeordneten POM zu erhalten. /Users/username/.m2/settings.xml

In diesem XML müssen Sie möglicherweise die Repository-Informationen angeben.

Wu Yongchao
quelle
Genial ! Das Hinzufügen meiner Repo-Details in den XML-Einstellungen hat funktioniert. Aber warum nimmt es nicht von der pom xml (die das gleiche Repo hinzugefügt hat)?
Smilyface
3

Fügen Sie einfach hinzu, <relativePath />damit das Elternteil in pom wie folgt aussehen sollte:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.RELEASE</version>
        <relativePath />
    </parent>
stakowerflol
quelle
2
Dies gilt nur, wenn sich das übergeordnete Element nicht in derselben Verzeichnisstruktur befindet, dh in einem Remote-Repository.
Ondra Žižka
2

Überprüfen Sie, ob in untergeordneten POMs korrekte Werte vorhanden sind

GroupId
ArtefactId
Version

In Eclipse können Sie beispielsweise danach suchen: Eclipse: Suche Eltern Pom

Stock
quelle
2

<relativePath>

Wenn Sie unter einem untergeordneten Projekt erstellen, dann <relativePath> können Sie das übergeordnete POM auflösen.

Installieren Sie das übergeordnete POM

Aber wenn Sie das untergeordnete Projekt aus seinem Ordner erstellen, <relativePath>funktioniert es nicht. Sie können installden übergeordneten POM zuerst in Ihr lokales Repository einfügen und dann das untergeordnete Projekt erstellen.

Falke
quelle
1

Ersetzen Sie 1.0_A0 durch $ {project.version}

Führen Sie mvn einmal aus. Dadurch werden alle erforderlichen Repositorys heruntergeladen. Nach diesem Schritt können Sie wieder zu 1.0_A0 wechseln.

Prasanth Pennepalli
quelle
Dies funktioniert nur, wenn das erforderliche übergeordnete POM dieselbe Version wie das POM des Submoduls hat. Dies ist nicht immer der Fall.
Gerold Broser
0

Ich hatte ein ähnliches Problem bei meiner Arbeit.

Beim Erstellen des übergeordneten Projekts ohne Abhängigkeit wurde die Datei parent_project.pom im Ordner .m2 erstellt.

Fügen Sie dann das untergeordnete Modul im übergeordneten POM hinzu und führen Sie den Maven-Build aus.

<modules>
    <module>module1</module>
    <module>module2</module>
    <module>module3</module>
    <module>module4</module>
</modules>
Prabhu
quelle
0

Fügen Sie eine Abhängigkeit in hinzu

pom.xml:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.8.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.4.3</version>
</dependency>
Siva
quelle
0

Ich habe dieses Problem bei mir nach einem sehr langen Versuch gelöst. Ich habe eine weitere Datei mit dem Namen "parent_pom.xml" im Dateiverzeichnis des untergeordneten Moduls im lokalen und eingefügten Inhalt von parent_pom.xml, die sich auf remote befindet, in die neu erstellte "parent_pom.xml" erstellt ". Es hat bei mir funktioniert und die Fehlermeldung ist verschwunden.

Ozan Apaydın
quelle
0

Innerhalb des relativen Pfad-Tags gehen Sie wie folgt vor

<relative>{project_name}/pom.xml</relative>

und dann RunAs-> Maven Build

Es hat bei mir funktioniert.

Sanket Dhumal
quelle
-2

Ich hatte das Problem, dass zwei Reaktor-Build-pom.xml-Dateien dieselbe Artefakt-ID hatten.

benez
quelle
In meinem Fall war dieses übergeordnete Modul nicht im übergeordneten Ordner, ich musste im
untergeordneten