À partir de Maven 2.0.9, il est possible d’inclure
<type>pom</type>
<scope>import</scope>
dans le <dependencyManagement>
section.
Si je comprends bien, il sera "remplacé" par les dépendances incluses dans ce pom comme si elles avaient été définies à l'origine ici.
Quelle est la différence entre la solution ci-dessus et la simple dépendance à ce pom sans import
(je vois que ce dernier est appelé "groupement de dépendances")? Est-ce que la seule différence entre ces dépendances "groupées" et leur priorité plus faible est la résolution de la priorité des dépendances?
Vous pouvez uniquement importer des dépendances gérées . Cela signifie que vous pouvez uniquement importer d'autres POM dans la section dependencyManagement
du POM de votre projet. c'est à dire.
...
<dependencyManagement>
<dependencies>
<dependency>
<groupId>other.pom.group.id</groupId>
<artifactId>other-pom-artifact-id</artifactId>
<version>SNAPSHOT</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
...
Ce qui se passe alors, c’est que toutes les dépendances définies dans la section dependencyManagement
du fichier other-pom-artifact-id
sont inclus dans la section dependencyManagement
de votre POM. Vous pouvez ensuite référencer ces dépendances dans la section dependency
de votre POM (et tous ses POM enfants) sans avoir à inclure un version
etc.
Cependant, si dans votre POM, vous définissez simplement une dépendance normale à other-pom-artifact-id
puis tous dependencies
de la section dependency
de la other-pom-artifact-id
sont inclus de manière transitoire dans votre projet - toutefois les dépendances définies dans la section dependencyManagement
du 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 différents de dépendances (dépendances gérées et dépendances normales).
Il y a une bonne page sur le site Web maven, qui peut expliquer cela beaucoup mieux que moi, Gestion des dépendances dans Maven et contenant également des informations spécifiques sur importation de dépendances .
Vous ne pouvez pas avoir un projet de type pom
en 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
. C'est essentiellement managing dependency through inheritance
.
import
la portée de pom
type dépendance dans la section <dependencyManagement>
vous permet d'obtenir l'équivalent de multiple inheritance
.
Vous pourriez avoir différents poms
- chacun managing
un groupe de dépendances connexes. Les projets qui les utilisent peuvent import
ces poms
, puis spécifier les dépendances dont ils ont besoin sans se soucier de la version. Ceci est essentiellement le concept bill of materials
, Qui est illustré dans les liens spécifiés par @ DB5.
Cela permet d'éviter que parent poms
De projets complexes comportant plusieurs modules ne soit trop volumineux et trop lourd.
Deux concepts, très similaires au paradigme de la programmation orientée objet, aideront à répondre à la question:
La section dependencyManagement ne déclare que les dépendances et leurs détails dans le projet actuel - le but est de gérer les détails et de les réutiliser dans d’autres projets, soit par héritage ( parent ) ou importer ( portée ). Cela revient à déclarer un type de données dans le programme et à le rendre disponible.
La section ) définit l'utilisation réelle des dépendances dans le projet, héritant éventuellement des détails (par exemple, version, etc.). ) des dépendances déclarées sous le dependencyManagment . C'est pourquoi vous aurez des dépendances manquantes si vous ne les mettez que dans dependencyManagment . Ceci est analogue à l'instanciation d'une instance variable d'un type de données dans un programme où cela est nécessaire.