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