2016-05-06 10 views
4

Betrachten Sie ein Maven-Projekt mit Modulen besteht aus einigen Dienstprogrammen (jar) und einige Poms für andere zu verweisen, wenn sie einige dieser Dienstprogramme verwenden möchten.Maven beschwert sich über Eltern relativer Pfad

z.B. innerhalb des übergeordneten pom.xml

<artifactId>project-parent</artifactId> 
<modules> 
    <module>client-ref-pom</module> (a module with just one pom.xml) 
    <module>server-ref-pom</module> (a module with just one pom.xml) 
    <module>client-utils</module> (a module with some utility classes, needs to ref. client-ref-pom) 
    <module>server-utils</module> (a module with some utility classes, needs to ref. server-ref-pom) 
    <module>utils</module> (a module with some utility classes, needs to ref. project-parent) 
</modules> 

Also, wenn es ein anderes Projekt die utils verwenden möchte, wird es zu ref-Pom als ihre Mutter pom verweisen, so dass die Eigenschaften vererbt werden können. Dieser Zweck wird bedient. Das aktuelle Problem ist, wenn das Modul utils auch ref-pom als Eltern-Pom referenzieren muss (und ref-pom referenziert project-parent als Eltern-Pom), maven klagt über "parent.relativePath". Zeigen auf Project-Parent statt Ref-Pom, was darauf hindeutet, die Projektstruktur erneut zu überprüfen.

Da das nur eine Warnung ist, kann ich das Projekt noch kompilieren, aber ich frage mich, wie man die Projektstruktur richtig einrichtet, damit Maven glücklich ist und mein Zweck erfüllt ist.

+1

Können Sie Ihre Projektstruktur (Ordnerstruktur) anzeigen und wo sich Ihre Pom-Dateien befinden. – khmarbaise

Antwort

9

Um das übergeordnete Projekt, diese möglichen Quellen geprüft, um zu beheben:

  • relativePath
  • lokale Repository
  • Remote-Repositories

Der relative Pfad, wenn nicht explizit angegeben, Standard ist .., dh die Pom im übergeordneten Verzeichnis des aktuellen Projekts. So überprüft Maven, ob a) es eine Pom-Datei in diesem Verzeichnis gibt und b) diese Pom-Datei die gleichen Koordinaten enthält wie in der Elterndefinition des aktuellen Projekts angegeben.

Wenn a) und b) wahr sind, wird diese Pom-Datei als übergeordnetes Element für die Auflösung des effektiven Pom verwendet.

Wenn a) wahr ist und b) falsch ist, wird eine Warnung ausgegeben, da dies normalerweise auf ein falsch konfiguriertes Projekt verweist (wie in Ihrem Fall) und der Pom ignoriert wird.

Wenn a) falsch ist, werden die anderen Quellen überprüft.

Also, in Ihrem Fall, ich nehme an, Sie haben die folgende in Ihrem utils/pom.xml

<parent> 
    <groupId>...</groupId> 
    <artifactId>ref-pom</artifactId> 
    <version>..</version> 
</parent> 

die <relativePath>..</relativePath> implizit enthält. So überprüft Maven das übergeordnete Verzeichnis von utils, findet ein POM, aber dieser Punkt heißt statt der erwarteten ref-pom. Also die Warnung.

Die folgende funktionieren würde:

<parent> 
    <groupId>...</groupId> 
    <artifactId>ref-pom</artifactId> 
    <version>..</version> 
    <relativePath>../ref-pom</relativePath> 
</parent> 

(Beachten Sie, dass in Ihrem Text, schreiben Sie ref-pom, aber in den Modulen oben gibt es nur client-ref-pom und server-ref-pom)

jedoch

Sie sollten darüber nachdenken, ob dies wirklich das ist, was Sie in Ihrem Fall wünschen, wenn die separaten *-ref-pom Module wirklich notwendig sind oder wenn der Inhalt von th Ose Poms könnten und sollten besser innerhalb der jeweiligen *-util Module platziert werden.

+0

Wirklich hilfreiche Informationen, danke! Ja, und ich denke, ich sollte die utils-Module wirklich eine Ebene tiefer in die ref-pom-Module verschieben. – user1589188