155 votes

Quelle est la différence entre une dépendance de type "pom" avec la portée "import" et sans "import" ?

À partir de la version 2.0.9 de Maven, il est possible d'inclure les éléments suivants

<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 ici à l'origine.

Quelle est la différence entre la solution ci-dessus et la simple dépendance à ce pom sans import (j'ai vu que ce dernier était appelé "regroupement de dépendances") ? La seule différence est-elle que ces dépendances "groupées" ont une priorité moindre alors que la résolution des dépendances est prioritaire ?

232voto

DB5 Points 12336

Vous pouvez uniquement importer dépendances gérées . Cela signifie que vous pouvez seulement import d'autres POM dans le dependencyManagement de la section POM de votre projet, à savoir

...
<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 le fichier dependencyManagement de la section other-pom-artifact-id sont inclus dans votre POM dependencyManagement section. Vous pouvez ensuite faire référence à ces dépendances dans la section dependency de votre POM (et de tous ses POMs enfants) sans avoir à inclure une section version etc.

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

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

Il existe une bonne page sur le site web de maven, qui peut expliquer cela bien mieux que moi, Gestion des dépendances dans Maven et il contient également des informations spécifiques sur l'importation de dépendances .

21voto

Raghuram Points 26896

Vous ne pouvez pas avoir un pom comme un projet de type simple dependency dans un autre projet. (Enfin, vous pouvez, mais cela ne servira à rien). Il ne peut y avoir qu'un parent-child relation. Il s'agit essentiellement managing dependency through inheritance .

import la portée de pom dépendance de type dans <dependencyManagement> vous permet d'obtenir l'équivalent de multiple inheritance .

Vous pourriez avoir différents poms - chacun managing un tas de dépendances connexes. Les projets qui les utilisent peuvent import ces poms puis de spécifier les dépendances dont ils ont besoin sans avoir à se soucier de la version. Il s'agit essentiellement de la bill of materials qui est illustré dans les liens spécifiés par @DB5.

Cela permet de garder parent poms de projets complexes à modules multiples, afin d'éviter qu'ils ne deviennent trop volumineux et difficiles à gérer.

11voto

Van Points 101

Deux concepts, très proches du paradigme de la programmation orientée objet, permettront de répondre à la question :

  1. El Gestion des dépendances 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 via l'héritage ( parent ) ou d'importation ( portée ). C'est comme déclarer un type de données dans un programme et le rendre disponible pour l'utilisation.

  2. El dépendance définit l'utilisation réelle des dépendances dans le projet, hérite éventuellement des détails (c'est-à-dire la version, etc.) des dépendances déclarées dans la section Gestion des dépendances . C'est pourquoi vous aurez des dépendances manquantes si vous les mettez seulement dans Gestion des dépendances . Ceci est analogue à l'instanciation d'une instance variable d'un type de données dans un programme où elle est nécessaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X