web-dev-qa-db-de.com

Nicht auflösbares übergeordnetes POM mit Maven 3.0.3 und relativePath-Notation

Nach der Migration auf Mavent 3.0.3 können übergeordnete Probleme in mehreren Projekten nicht mehr behoben werden.

Die Projekte sind standardmäßig strukturiert, daher setze ich parent.relativePath auf "../pom.xml".

superpom (located in repository)
|-rootpom (located locally: no error)
|-|-parentpom (located locally: error resolving parent)
|-|-|-module1 (located locally: error resolving parent)
|-|-|-module2 (located locally: error resolving parent)
|-|-|-module3 (located locally: error resolving parent)
|-|-|-module4 (located locally: error resolving parent)

Der Fehler...

Nicht auflösbares übergeordnetes POM für myGroup: myArtifactId: 1.0: Fehler beim Auffinden von myGroup: myParentArtifactId: 1.0 in http://myRepo.net/archiva/repository/maven2 wurde im lokalen Repository zwischengespeichert nicht erneut versucht werden, bis das Aktualisierungsintervall von maven2 abgelaufen ist oder Aktualisierungen erzwungen wurden und 'parent.relativePath' auf den falschen lokalen POM @ myGroup zeigt: myParentArtifactId: 1.0, C:\myProjectDir\parent\pom.xml, Zeile x, Spalte y - > [Hilfe 2]

... scheint darauf hinzudeuten, dass der Pom im Repository gesucht wurde. Deshalb frage ich mich, warum der Pom nicht vor Ort gefunden wurde, bevor er woanders gesucht wurde.

Ich habe gelesen, dass maven3 möglicherweise verwirrt wird, wenn mehrere Repositorys in der settings.xml definiert sind, aber das war immer dann, wenn in Repositorys nach einem POM gesucht wurde und nicht lokal.

update

Bisher haben wir den Maven-Build auf der Ebene des übergeordneten Projekts (parentpom) ausgeführt - eine Tatsache, von der ich nicht wusste, dass sie wichtig ist, da maven2 bis jetzt erfolgreich abgeschlossen wurde.

Bei der Verwendung von maven3 scheint dies von Bedeutung zu sein. Wenn Sie maven3 auf der Root-Projekt-Ebene (rootpom) ausführen, wird der Build erfolgreich abgeschlossen. Damit ist mein unmittelbares Problem gelöst.

Da ich meine eigene Frage nicht unbedingt beantworten möchte, kann vielleicht jemand erklären, warum sich maven3 jetzt so verhält oder warum der alte Ansatz falsch war.

30
elfwyn

Stellen Sie sicher, dass die Version, auf die Sie sich im Child-Pom beziehen, mit der im Parent-Pom übereinstimmt. Für mich hatte ich die übergeordnete Version gestoßen und als 3.1.0.0-RELEASE angegeben, aber in der untergeordneten Version bezog ich mich immer noch auf die vorherige Version über relativePath und hatte sie als 2.0.0.0-SNAPSHOT definiert. Es machte keinen Unterschied, ob ich nur das übergeordnete Verzeichnis einfügte oder die Datei "pom.xml" an das Verzeichnis anhängte:

    <parent>        
    <artifactId>eric-project-parent</artifactId>
    <groupId>com.eric.common</groupId>
     <!-- Should be 3.1.0.0-RELEASE -->
    <version>2.0.0.0-SNAPSHOT</version>     
    <relativePath>
                ../../EricParentAsset/projects/eric-project-parent</relativePath>           
</parent>
34
Eric Manley

Hier ist Antwort auf Ihre Frage.

Standardmäßig sieht maven in ../pom.xml für relativePath. Verwenden Sie leer <relativePath/> tag stattdessen.

11
Ilya Silvestrov

'parent.relativePath' verweist auf falsches lokales POM @ myGroup: myParentArtifactId: 1.0, C:\myProjectDir\parent\pom.xml

Dies zeigt an, dass maven lokal nach dem übergeordneten Pom gesucht hat, aber festgestellt hat, dass es nicht der richtige Pom ist.

  • Hat pom.xml von parentpom definieren den parent pom korrekt als pom.xml von rootpom?
  • Enthält der Ordner rootpompom.xml sowie der paretpom Ordner?
6
Raghuram

Ich hatte das gleiche problem Mein Projektlayout sah so aus

\---super
    \---thirdparty
        +---mod1-root
        |   +---mod1-linux32
        |   \---mod1-win32
        \---mod2-root
            +---mod2-linux32
            \---mod2-win32

In meinem Fall hatte ich einen Fehler in meiner pom.xmls auf der modX-root-Ebene. Ich hatte den mod1-root-Baum kopiert und ihn mod2-root genannt. Ich dachte fälschlicherweise, ich hätte alle pom.xmls entsprechend aktualisiert. Tatsächlich hatte mod2-root/pom.xml die gleichen Gruppen- und Artefakt-IDs wie mod1-root/pom.xml. Nachdem ich die pom.xml von mod2-root korrigiert hatte, um mod2-root-spezifische Maven-Koordinaten zu erhalten, wurde mein Problem behoben.

2
buzz3791

Sie müssen Ihren relativen Pfad überprüfen, basierend auf der Tiefe Ihrer Module vom übergeordneten Modul, wenn das Modul direkt unter dem übergeordneten Modul liegt. Geben Sie dann im Modul den relativen Pfad ein: ../pom.xml

wenn es 2 Level tiefer ist, dann ../../pom.xml

1
user5371337

Bitte überprüfen Sie in den Protokollen, ob Sie http.HttpWagon $ __ sisu1 haben: Kann diesen Fehler oder diese Warnung nicht 'basicAuthScope' finden. In diesem Fall müssen Sie die Version 3.2.5 von maven verwenden, um den Fehler zu beheben.

0
user5371337
<parent>
        <groupId>com.test.vaquar.khan</groupId>
        <artifactId>vk-parent</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>../projectname/pom.xml</relativePath>
    </parent>

Fügen Sie die folgende Zeile im übergeordneten Element hinzu

<relativePath>../projectname/pom.xml</relativePath>

Sie benötigen einen relativen Pfad, wenn Sie aus einem lokalen übergeordneten POM erstellen, der in Nexsus nicht verfügbar ist. Fügen Sie POM in Nexus hinzu, und benötigen Sie diesen Pfad nicht

0
vaquar khan

Bei mir funktioniert es, wenn ich die "Gruppen-ID" und "Artefakt-ID" der Eltern doppelt überprüft habe, dass in meinem Fall die falschen waren und das das Problem war.

0
Manuel Pérez