Quelle est la différence entre une dépendance de type «importation» et «pom»?

À partir de Maven 2.0.9, il est possible d’inclure

pom import 

dans la section .

Si je comprends bien, il sera “remplacé” par des dépendances incluses dans ce fichier comme si elles avaient été définies ici.

Quelle est la différence entre la solution ci-dessus et la dépendance simple à ce pom sans scope d’ import (j’ai vu ce dernier s’appeler “groupement des dépendances”)? La seule différence est que ces dépendances “groupées” ont une priorité inférieure lors de la résolution de la priorité des dépendances?

Vous ne pouvez importer que des dépendances gérées . Cela signifie que vous ne pouvez importer d’ autres POM que dans la section dependencyManagement du POM de votre projet. c’est à dire

 ...    other.pom.group.id other-pom-artifact-id SNAPSHOT import pom    ... 

Ce qui se passe alors, c’est que toutes les dépendances définies dans la section dependencyManagement de l’ other-pom-artifact-id sont incluses dans la section dependencyManagement votre POM. Vous pouvez ensuite référencer ces dépendances dans la section dependency de votre POM (et de tous ses POM enfants) sans avoir à inclure de version etc.

Cependant, si dans votre POM, vous définissez simplement une dépendance normale à other-pom-artifact-id toutes les dependencies de la section dependency de l’ other-pom-artifact-id sont incluses de manière transitoire dans votre projet – cependant les dépendances définies dans la section dependencyManagement de l’ other-pom-artifact-id ne sont pas inclus du tout.

Donc, fondamentalement, les deux mécanismes différents sont utilisés pour importer / inclure les deux types de dépendances différents (dépendances gérées et dépendances normales).

Il existe une bonne page sur le site Web maven, qui peut expliquer cela beaucoup mieux que moi, la gestion des dépendances dans Maven et elle contient également des informations spécifiques sur l’ importation des dépendances .

Vous ne pouvez pas avoir un projet de type pom tant que simple dependency dans un autre projet. (Eh bien, vous pouvez – mais cela ne fera rien d’utile). Il ne peut y avoir qu’une relation parent-child . Ceci est essentiellement la managing dependency through inheritance .

import scope d’ import pour la dépendance de type pom dans la section vous permet d’obtenir l’équivalent de l’ multiple inheritance .

Vous pourriez avoir différents poms – chacun managing un groupe de dépendances connexes. Les projets qui les utilisent pourraient import ces poms , puis spécifier les dépendances dont ils ont besoin sans avoir à se soucier de la version. Il s’agit essentiellement du concept de nomenclature, illustré par les liens spécifiés par @ DB5.

Cela permet d’éviter que parent poms complexes multi-modules deviennent trop volumineux et trop lourds.

Deux concepts, très similaires au paradigme de la programmation orientée object, aideront à répondre à la question:

  1. La section dependencyManagement déclare uniquement les dépendances et leurs détails dans le projet en cours – le but est de gérer les détails et de les réutiliser dans d’autres projets, soit par inheritance ( parent ), soit par import ( scope ). Cela revient à déclarer un type de données dans le programme et à le rendre disponible.

  2. La section de dépendance définit l’utilisation réelle des dépendances dans le projet, hérite éventuellement des détails (c.-à-d. Version, etc.) des dépendances déclarées dans le fichier dependencyManagment . C’est pourquoi vous aurez des dépendances manquantes si vous ne les mettez que dans dependencyManagment . Cela revient à instancier une instance de variable d’un type de données dans un programme où cela est nécessaire.