Problème de construction
En exécutant un mvn clean sur un projet Spring Boot, une erreur se produit, indiquant que l'aretfact io.netty:netty-bom:pom:5.0.0.Alpha2 est introuvable dans le dépôt distant.
L'analyse du fichier spring-boot-dependencies-2.1.6.RELEASE.pom (utilisé comme BOM parent) révèle la source du conflit. Ce fichier de gestion des dépendances de Spring Boot définit lui-même une version pour les composants Netty via une propriété et une importation de BOM.
Voici un extrait pertinent de ce fichier POM parent :
<properties>
...
<netty.version>4.1.38.Final</netty.version>
...
</properties>
...
<dependencyManagement>
<dependencies>
...
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-bom</artifactId>
<version>${netty.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
...
</dependencies>
</dependencyManagement>
Racine du conflit
Le fichier POM du projet enfant définit également une propriété portant le même nom netty.version, mais avec une valeur différente, destinée à la dépendance directe io.netty:netty-all.
<properties>
...
<netty.version>5.0.0.Alpha2</netty.version>
...
</properties>
...
<dependencies>
...
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>${netty.version}</version>
</dependency>
...
</dependencies>
Le mécanisme d'héritage des propriétés dans Maven a pour conséquence que la propriété netty.version définie dans le projet enfant (5.0.0.Alpha2) écrase celle définie dans le BOM parent Spring Boot (4.1.38.Final). Par conséquent, lors de la résolution des dépendances, Maven tente d'utiliser la version 5.0.0.Alpha2 pour importer le BOM io.netty:netty-bom, qui n'existe pas pour cette version, provoquant ainsi l'erreur de construction.
Solution appliquée
Pour éviter ce conflit de noms de propriétés, il faut utiliser un nom de propriété unique dans le POM du projet pour contrôler la version de netty-all. Renommer la propriété en netty.all.version (ou un autre nom distinct) résout le problème.
<properties>
...
<netty.all.version>5.0.0.Alpha2</netty.all.version>
...
</properties>
...
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>${netty.all.version}</version>
</dependency>
Après ce changement, mvn clean s'exécute avec succès. La propriété netty.version du BOM parent n'est plus écrasée et Maven peut correctement résoudre l'importation du BOM netty-bom avec la version 4.1.38.Final définie dans spring-boot-dependencies, tandis que la dépendance directe netty-all utilise la version 5.0.0.Alpha2 via la propriété renommée.