Vous ne pouvez importer que les dépendances gérées . Cela signifie que vous ne pouvez importer que d' autres POM dans la dependencyManagement
section 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 dependencyManagement
section du other-pom-artifact-id
sont incluses dans la dependencyManagement
section de votre POM . Vous pouvez ensuite référencer ces dépendances dans la dependency
section 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
alors tous dependencies
de la dependency
section de other-pom-artifact-id
sont inclus de manière transitoire dans votre projet - cependant les dépendances définies dans la dependencyManagement
section de other-pom-artifact-id
ne sont pas incluses 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 de maven, qui peut expliquer cela bien mieux que moi, la gestion des dépendances dans Maven et elle contient également des informations spécifiques sur l' importation de dépendances .
pom
A in est le parent depom
B, pouvez-vous placer B dans la gestion des dépendances du projet A avec portéeimport
?... <dependencies> <dependency> <groupId>${project.groupId}</groupId> <artifactId>pomlib-lib</artifactId> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>${project.groupId}</groupId> <artifactId>pomlib-war</artifactId> <type>war</type> </dependency> </dependencies> </project>
DRY et Skinny WarVous ne pouvez pas avoir un
pom
projet de type en tant quesimple dependency
dans un autre projet. (Eh bien, vous pouvez - mais cela ne fera rien d'utile). Il ne peut y avoir qu'uneparent-child
relation. C'est essentiellementmanaging dependency through inheritance
.import
la portée de lapom
dépendance de type dans la<dependencyManagement>
section vous permet d'obtenir l'équivalent demultiple inheritance
.Vous pourriez avoir différents
poms
- chacunmanaging
un tas de dépendances liées. Les projets qui utilisent ceux - ci pourraientimport
ceux - cipoms
et préciser les dépendances dont ils ont besoin sans avoir à vous soucier de la version. C'est essentiellement lebill of materials
concept, qui est illustré dans les liens spécifiés par @ DB5.Cela permet d'éviter que
parent poms
les projets complexes à plusieurs modules ne deviennent trop volumineux et trop lourds.la source
Deux concepts, très similaires au paradigme de programmation orientée objet, aideront à répondre à la question:
La section dependencyManagement déclare uniquement les dépendances et leurs détails dans le projet en cours - le but est la gestion des détails et la réutilisation dans d'autres projets, soit via l'héritage ( parent ) ou l'importation ( portée ). C'est comme déclarer un type de données dans un programme et le rendre disponible pour utilisation.
La section dependency définit l'utilisation réelle des dépendances dans le projet, hérite éventuellement des détails (ie, 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 . Cela revient à instancier une instance de variable d'un type de données dans un programme là où cela est nécessaire.
la source