Możesz importować tylko zależności zarządzane . Oznacza to, że możesz importować tylko inne pliki POM do dependencyManagement
sekcji pliku POM projektu. to znaczy
...
<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>
...
To, co się wtedy dzieje, to to, że wszystkie zależności zdefiniowane w dependencyManagement
sekcji other-pom-artifact-id
są zawarte w dependencyManagement
sekcji twojego POM . Następnie możesz odwołać się do tych zależności w dependency
sekcji swojego POM (i wszystkich jego podrzędnych POM) bez konieczności dołączania version
itp.
Jeśli jednak w swoim POM po prostu zdefiniujesz normalną zależność, other-pom-artifact-id
to wszystkie elementy dependencies
z dependency
sekcji other-pom-artifact-id
zostaną włączone do twojego projektu przejściowo - jednak zależności zdefiniowane w dependencyManagement
sekcji other-pom-artifact-id
nie będą w ogóle uwzględnione.
Tak więc zasadniczo dwa różne mechanizmy są używane do importowania / włączania dwóch różnych typów zależności (zależności zarządzane i normalne zależności).
Na stronie internetowej mavena jest dobra strona, która może to wyjaśnić znacznie lepiej niż ja, Zarządzanie zależnościami w Maven, a także zawiera szczegółowe informacje na temat importowania zależności .
pom
A w jest rodzicempom
B, czy możesz umieścić B w zarządzaniu zależnościami projektu A z zakresemimport
?... <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 i Skinny WarNie możesz mieć
pom
projektu typu jakosimple dependency
w innym projekcie. (Cóż, możesz - ale to nic nie da). Może istnieć tylkoparent-child
związek. To jest zasadniczomanaging dependency through inheritance
.import
zakrespom
zależności typu w<dependencyManagement>
sekcji pozwala uzyskać odpowiednikmultiple inheritance
.Możesz mieć inny
poms
- każdymanaging
zestaw powiązanych zależności. Projekty, które z nich korzystają, mogąimport
jepoms
określać, a następnie określać potrzebne im zależności, bez martwienia się o wersję. Zasadniczo jest tobill of materials
koncepcja, która jest zilustrowana w linkach określonych przez @ DB5.Pomaga to w zapobieganiu
parent poms
zbyt dużym i nieporęcznym projektom złożonym z wielu modułów.źródło
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 poprzez dziedziczenie (element nadrzędny ) lub import ( zakres ). Jest to podobne do zadeklarowania typu danych w programie i udostępnienia go do użytku.
Sekcja zależności definiuje rzeczywiste użycie zależności w projekcie, opcjonalnie dziedziczenie szczegółów (tj. Wersji itp.) Zależności zadeklarowanych w zależności od zależności . Dlatego będziesz mieć 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.
źródło