wake-up-neo.com

Maven beschwert sich über relativen Pfad der Eltern

Stellen Sie sich vor, ein maven-Projekt mit Modulen besteht aus einigen Dienstprogrammen (jar) und einigen poms, auf die andere verweisen, wenn sie einige dieser Dienstprogramme verwenden möchten.

z.B. in der übergeordneten Datei 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>

Wenn in einem anderen Projekt die Utils verwendet werden sollen, wird ref-pom als übergeordnetes pom angegeben, damit die Eigenschaften übernommen werden können. Diesem Zweck wird gedient.

Das aktuelle Problem besteht darin, dass sich Maven beschwert, dass 'parent.relativePath' auf 'project-pom' verweist, wenn die Modul-Utils auch auf 'ref-pom' als übergeordnetes Pom verweisen müssen (und 'ref-pom' auf 'project-parent' als übergeordnetes Pom verweisen). übergeordnet anstelle von ref-pom und schlägt vor, die Projektstruktur erneut zu überprüfen.

Da dies nur eine Warnung ist, kann ich das Projekt immer noch kompilieren, aber ich frage mich, wie ich die Projektstruktur so einrichten kann, dass maven zufrieden ist und mein Zweck erfüllt wird.

16
user1589188

Um das übergeordnete Projekt aufzulösen, werden diese möglichen Quellen überprüft:

  • relativePath
  • lokales Repository
  • remote-Repositorys

Der relative Pfad ist, falls nicht explizit angegeben, standardmäßig .., D. H. Der pom im übergeordneten Verzeichnis des aktuellen Projekts. Also prüft Maven, ob a) sich eine POM-Datei in diesem Verzeichnis befindet und b) diese POM-Datei dieselben Koordinaten enthält, wie sie in der übergeordneten Definition des aktuellen Projekts angegeben sind.

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

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

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

In Ihrem Fall gehe ich also davon aus, dass Sie Folgendes in Ihrer Datei utils/pom.xml haben

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

welches implizit <relativePath>..</relativePath> enthält. Also überprüft Maven das übergeordnete Verzeichnis der Utils und findet einen POM, aber dieser Punkt heißt project-parent Anstelle des erwarteten ref-pom. Also die Warnung.

Folgendes würde funktionieren:

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

(Beachten Sie, dass Sie in Ihrem Text über ref-pom schreiben, in den obigen Modulen jedoch nur client-ref-pom Und server-ref-pom)

jedoch

Sie sollten sich überlegen, ob dies wirklich das ist, was Sie wollen, in Ihrem Fall, ob die separaten *-ref-pom - Module wirklich notwendig sind oder ob der Inhalt dieser poms besser in den jeweiligen *-util Module.

33
blackbuild