web-dev-qa-db-fra.com

Maven - version gérée depuis x, omise pour doublon?

J'ai du mal à comprendre ce qui se passe dans l'arbre de dépendance maven quand il indique la version gérée à partir de x; omis pour doublon.

Par exemple, supposons que j'ai enterprise-data-2.4 défini dans la section de gestion des dépendances de server-a.

J'obtiens ce qui suit dans l'arborescence des dépendances de server-a pour l'une des dépendances server-b en tirant enterprise-data-2.4.

[INFO] +- hello.world.welcome.to:server-b:jar:3.1-SNAPSHOT:runtime
[INFO] |  +- (hello.world.where.am: enterprise-data:jar:2.4:runtime - version managed from 3.0; omitted for duplicate)

En supposant server-b est le seul pot qui tire enterprise-data-2.4, je crois comprendre que server-a tirera toujours enterprise-data-2.4 ici. Est-ce correct?

J'ai cependant du code dans server-b dépend de enterprise-data-3.0 et server-b a une dépendance de temps de compilation sur enterprise-data-3.0.

Maintenant, j'ai un projet de test, disons test-b qui teste server-b pot présent à l'intérieur server-a projet et a une dépendance de test sur enterprise-data-3.0. Ces tests atteignent directement le code présent sur server-a.

Lorsque j'exécute mes tests dans test-b dois-je obtenir des erreurs lors de la tentative d'accès aux fonctionnalités présentes dans enterprise-data-3.0 car il n'est pas attiré par server-a ou passera-t-il car il existe une dépendance de test sur enterprise-data-3.0? Il passe actuellement mais je ne sais pas comment une dépendance de test est suffisante.

Veuillez m'aider à comprendre.

Modifier: j'utilise maven-3.

Merci.

15
collegian

Par exemple, supposons que j'ai enterprise-data-2.4 défini dans la section de gestion des dépendances de server-a.

Ensuite, vous obtenez toujours 2.4 tiré, même s'il n'y a que des fichiers JAR dépendant de 1.8 par exemple. La gestion des dépendances remplace la médiation des dépendances.

En supposant que server-b est le seul bocal à extraire enterprise-data-2.4 , ma compréhension est que server-a tirera toujours enterprise-data-2.4 ici. Est-ce correct?

En supposant que vous n'avez pas de gestion des dépendances, alors oui. S'il existe plusieurs dépendances qui dépendent de différentes versions, il s'agit de savoir laquelle (et ses dépendances transitives) est chargée en premier, conformément aux règles de médiation des dépendances pour la version Maven> 2.0.9. Les autres seront: "gérés à partir de x et omis pour les doublons".

Lorsque j'exécute mes tests dans test-b dois-je obtenir des erreurs lors de la tentative d'accès aux fonctionnalités présentes dans entreprise-données -3.0 car il n'est pas attiré par server-a ou passera-t-il car il existe une dépendance de test sur enterprise-data-3.0 ? Il passe actuellement mais je ne sais pas comment une dépendance de test est suffisante.

S'il tire la mauvaise version avec un code incompatible, oui, vous verrez des erreurs. Pour Maven 3, définir une dépendance de portée de test avec 3.0 et compiler la dépendance de portée avec 2.4 signifie que Maven remplace le 2.4 et va avec le plus récent défini sur la portée de test. Voir cette question et ses réponses pour plus de détails.

Néanmoins, vous pouvez toujours utiliser la gestion des dépendances dans test-b pour corriger la version de chaque dépendance que vous souhaitez utiliser.

3
t0mppa