Les nouvelles versions de dépendances remplacent-elles les anciennes versions dans les projets maven?

Si j’ai un projet maven qui a des dépendances explicites sur A et B version 2.0 et A a une dépendance transitive sur B version 1.0 . La nouvelle version de B remplace-t-elle l’ancienne version? J’ai utilisé maven depencdy: resolvez goal et il semble que l’ancienne version de B ne soit pas résolue. Que faire si A est incompatible avec la nouvelle version de B ? Ou si A dépend de B version 2.0 et que mon projet a une dépendance explicite sur B version 1.0 après avoir exécuté dépendance: objective de résolution, je ne vois pas la version plus récente de B alors. Alors, comment résoudre ces dépendances?

Et lorsque j’utilise l’objective de résolution, il affiche des dépendances. Mais à quelle phase ces dépendances seront-elles utilisées? Comstackr, tester, exécution?

La version la plus proche de la racine de votre arbre de dépendance sera privilégiée. Si les deux versions en conflit ont la même profondeur dans l’arborescence, la première (en partant du haut de l’arborescence) l’emporte.

Est-ce une règle complètement stupide? Oui, ça l’est. Son seul avantage est que vous pouvez toujours forcer une version spécifique d’une dépendance en la déclarant comme dépendance directe de votre projet.

Donc dans votre cas, B: 2.0 sera utilisé, car il est déclaré en tant que dépendance directe. Si A ne fonctionne pas bien avec B: 2.0, alors, bien, utilisez B: 1.0 dans votre code ou choisissez une autre bibliothèque qui fait la même chose que A mais ne provoque pas de conflit.

Je ne peux pas choisir la version la plus récente d’un artefact lorsque plusieurs versions sont référencées dans l’arbre de dépendance. En regardant http://maven.apache.org/plugins/maven-dependency-plugin/examples/resolving-conflicts-using-the-dependency-tree.html , il semble qu’il choisisse la définition la plus proche à la racine de l’arbre. Cela signifie que la version du POM principal sera préférée à celle des dépendances transitives. Donc, si au lieu de cela, votre projet dépend de B v1.0 et A dépendait de manière transitive de B v2.0, votre projet aura alors choisi B v1.0.