web-dev-qa-db-fra.com

Maven se plaint du chemin relatif des parents

Considérons un projet maven avec des modules composés de certains utilitaires (jar) et de certains poms pour que d'autres s'y réfèrent s'ils souhaitent utiliser certains de ces utilitaires.

par exemple. à l'intérieur du parent 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>

Donc, si un autre projet souhaite utiliser les utilitaires, il fera référence à ref-pom comme pom parent, afin que les propriétés puissent être héritées. Cet objectif est atteint.

Le problème actuel est lorsque les modules utils doivent également faire référence à ref-pom comme son parent pom (et ref-pom référencera project-parent comme son parent pom), maven se plaint que 'parent.relativePath' pointe vers project- parent au lieu de ref-pom, suggérant de vérifier à nouveau la structure du projet.

Comme ce n'est qu'un avertissement, je peux toujours compiler le projet, mais je me demande la bonne façon de configurer la structure du projet afin que maven soit heureux et que mon objectif soit atteint.

16
user1589188

Afin de résoudre le projet parent, ces sources possibles sont vérifiées:

  • chemin relatif
  • référentiel local
  • référentiels distants

Le chemin relatif, s'il n'est pas indiqué explicitement, prend par défaut .., c'est-à-dire le pom dans le répertoire parent du projet en cours. Donc Maven vérifie si a) il y a un fichier pom dans ce répertoire et b) ce fichier pom contient les mêmes coordonnées que celles indiquées dans la définition parent du projet en cours.

Si a) et b) sont vrais, ce fichier pom est utilisé comme parent pour la résolution du pom effectif.

Si a) est vrai et b) est faux, un avertissement est donné, car cela pointe généralement vers un projet mal configuré (comme dans votre cas) et le pom est ignoré.

Si a) est faux, les autres sources sont vérifiées.

Donc, dans votre cas, je suppose que vous avez les éléments suivants dans votre utils/pom.xml

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

qui inclut implicitement <relativePath>..</relativePath>. Donc Maven vérifie le répertoire parent des utilitaires, trouve un POM, mais ce point est nommé project-parent au lieu de la valeur attendue ref-pom. D'où l'avertissement.

Les éléments suivants fonctionneraient:

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

(Notez que dans votre texte, vous écrivez sur ref-pom, mais dans les modules ci-dessus il n'y a que client-ref-pom et server-ref-pom)

cependant

Vous devriez vous demander si c'est vraiment ce que vous voulez, dans votre cas, si le *-ref-pom les modules sont vraiment nécessaires ou si le contenu de ces poms pourrait et devrait être mieux placé à l'intérieur des _ *-util modules.

33
blackbuild