Jaka jest różnica między zależnością typu " pom "z zakresem" import "i bez "import"?

Począwszy od Mavena 2.0.9 istnieje możliwość włączenia

<type>pom</type>
<scope>import</scope>

W sekcji <dependencyManagement>.

Jak rozumiem, zostanie ona "zastąpiona" zależnościami zawartymi w tym pom, tak jakby były one pierwotnie zdefiniowane tutaj.

Jaka jest różnica pomiędzy powyższym rozwiązaniem a prostą zależnością do tego pom Bez import zakresu (widziałem, że ten drugi nazywa się"grupowaniem zależności")? Jest jedyną różnicą, że takie" zgrupowane " zależności mają niższe priorytet podczas rozwiązywania zależności pierwszeństwo?

Author: B.Pukhalskyi, 2012-08-02

3 answers

Możesz importować tylko zarządzane zależności. Oznacza to, że możesz importować tylko inne pomy do dependencyManagement sekcji POM twojego projektu. tj.

...
<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>
...

Dzieje się tak, że wszystkie zależności zdefiniowane w sekcji dependencyManagement other-pom-artifact-id są zawarte w sekcji dependencyManagement twojego POM. Następnie możesz odwoływać się do tych zależności w sekcji dependency swojego POM (i wszystkich jego pomów potomnych) bez konieczności dołączania version itd.

Jednakże jeśli w Twoim POM po prostu definiujesz normalną zależność do other-pom-artifact-id, wtedy wszystkie dependencies z dependency sekcji other-pom-artifact-id są włączone przejściowo do twojego projektu - jednak zależności zdefiniowane w dependencyManagement sekcji other-pom-artifact-id nie są w ogóle uwzględnione.

Więc zasadniczo dwa różne mechanizmy są używane do importowania / włączania dwóch różnych typów zależności (zarządzane zależności i normalne zależności).

Jest dobra strona na stronie maven, która może wyjaśnić to daleko lepiej niż mogę, Zarządzanie zależnościami w Maven i zawiera również szczegółowe informacje na temat importowanie zależności.

 192
Author: DB5,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-26 21:23:19

Nie możesz mieć projektu typu pom jako simple dependency w innym projekcie. (Cóż, możesz - ale to nie zrobi nic użytecznego). Może istnieć tylko parent-child związek. Jest to zasadniczo managing dependency through inheritance.

import Zakres zależności typu {[0] } w sekcji <dependencyManagement> pozwala uzyskać odpowiednik multiple inheritance.

Możesz mieć różne poms - każdy managing kilka powiązanych zależności. Projekty, które z nich korzystają, mogą import te poms, a następnie określić zależności że potrzebują, nie martwiąc się o wersję. Jest to zasadniczo koncepcja bill of materials, która jest zilustrowana w linkach podanych przez @DB5.

Pomaga to utrzymać parent poms złożonych projektów wielomodułowych przed zbyt dużymi i nieporęcznymi.

 16
Author: Raghuram,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-02 17:26:30

Dwie koncepcje, bardzo podobne do paradygmatu programowania obiektowego, pomogą odpowiedzieć na pytanie:

  1. Sekcja dependencyManagement deklaruje tylko zależności i ich szczegóły w bieżącym projekcie - celem jest zarządzanie szczegółami i ponowne wykorzystanie w innych projektach, albo poprzez dziedziczenie (rodzic) lub import (Zakres). To tak jak deklarowanie typu danych w programie i udostępnianie go dla użyj.

  2. Na zależność sekcja określa rzeczywiste użycie zależności w projekcie, opcjonalnie dziedziczy szczegóły (np. wersję, itd.) zależności zadeklarowanych w ramach dependencyManagment. Dlatego będziesz miał brakujące zależności, Jeśli umieścisz je tylko w dependencyManagment. Jest to analogiczne do tworzenia instancji zmiennej typu danych w programie, w którym jest to potrzebne.

 7
Author: Van,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-20 00:28:32