Récemment, j'ai travaillé sur certaines améliorations d'un projet développé il y a quelque temps, et voici ce que j'ai trouvé. Beaucoup de dépendances dans les fichiers pom vont sans versions spécifiées, et pourtant elles sont résolues. Le projet comprend 1 module racine et 2 sous-modules. Le modèle Aggregator est utilisé, ce qui signifie qu'il n'y a pas de section dependencyManagement. Le projet supérieur regroupe simplement 2 modules et c'est tout ce qu'il fait. Les sous-projets ne s'y réfèrent pas comme à un parent. Ils ont un parent différent. Ce que je ne peux pas comprendre, c'est que ni les sous-projets eux-mêmes ni leur parent (en fait, il n'a pas non plus dependencyManagement) spécifient des versions pour certaines des dépendances. Par exemple:
<dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
</dependency>
<dependency>
<groupId>com.Sun.mail</groupId>
<artifactId>javax.mail</artifactId>
</dependency>
<dependency>
<groupId>com.Sun.mail</groupId>
<artifactId>imap</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
Quelqu'un peut m'aider à trouver la solution? Est-ce que maven gère le versioning avec une stratégie par défaut? Quelle est cette stratégie par défaut?
Ok, je pense que je vais y répondre moi-même. Bien sûr, j’ai jeté un œil à dependency: tree, mais toutes les dépendances que j’ai mentionnées étaient des membres de premier niveau de l’arbre. Ce que je n’ai pas remarqué tout de suite, c’est que dependencyManagement
n’est pas présent dans le parent, mais il est cependant présent dans les sous-modules, et ce qui est plus intéressant, il contient:
<dependency>
<groupId>io.spring.platform</groupId>
<artifactId>platform-bom</artifactId>
<version>1.0.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
Je n’ai jamais utilisé Spring IO Platform auparavant, c’est donc un tout nouveau concept pour moi. Comme il s’avère que la plateforme inclut de nombreuses dépendances préconfigurées: http: // docs.spring.io/platform/docs/current/reference/htmlsingle/#appendix-dependency-versions
Il est impossible pour Maven de travailler sans définir des versions des artefacts. Ils doivent être définis quelque part dans la balise dependencyManagement dans le sous-module ou le parent. S'il vous plaît vérifier votre hiérarchie de pom. Utilisation mvn help:effective-pom
dans le répertoire de sous-modules du projet. Aussi, vous pouvez utiliser mvn dependency:tree
afin de déterminer quels artefacts, ainsi que les informations complètes sur celui-ci, y compris les numéros de version, sont résolus dans le résultat de la gestion des dépendances.