Sie können nur verwaltete Abhängigkeiten importieren . Dies bedeutet, dass Sie nur andere POMs in den Abschnitt des POM Ihres Projekts importieren können dependencyManagement
. dh
...
<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>
...
Was dann passiert, ist, dass alle im dependencyManagement
Abschnitt von definierten Abhängigkeiten im Abschnitt other-pom-artifact-id
Ihres POM enthalten sind dependencyManagement
. Sie können diese Abhängigkeiten dann im dependency
Abschnitt Ihres POM (und aller untergeordneten POMs) referenzieren, ohne ein version
usw. einfügen zu müssen .
Wenn Sie jedoch in Ihrem POM einfach eine normale Abhängigkeit definieren, werden other-pom-artifact-id
alle dependencies
aus dem dependency
Abschnitt von other-pom-artifact-id
transitiv in Ihr Projekt aufgenommen - die im dependencyManagement
Abschnitt von definierten Abhängigkeiten other-pom-artifact-id
werden jedoch überhaupt nicht berücksichtigt.
Grundsätzlich werden also die beiden unterschiedlichen Mechanismen zum Importieren / Einschließen der beiden unterschiedlichen Arten von Abhängigkeiten (verwaltete Abhängigkeiten und normale Abhängigkeiten) verwendet.
Auf der Maven-Website gibt es eine gute Seite, die dies weitaus besser erklären kann als ich, Dependency Management in Maven, und die auch spezifische Informationen zum Importieren von Abhängigkeiten enthält .
pom
A in übergeordnet zupom
B ist, können Sie B in das Abhängigkeitsmanagement von Projekt A mit Umfang einfügenimport
?... <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 und Skinny WarSie können ein
pom
Typprojekt nicht als in einemsimple dependency
anderen Projekt haben. (Nun, Sie können - aber es wird nichts Nützliches tun). Es kann nur eineparent-child
Beziehung geben. Dies ist im Wesentlichenmanaging dependency through inheritance
.import
Mit dem Bereich für diepom
Typabhängigkeit im<dependencyManagement>
Abschnitt können Sie das Äquivalent von erreichenmultiple inheritance
.Sie könnten unterschiedliche Abhängigkeiten haben
poms
- jeweilsmanaging
eine Reihe verwandter Abhängigkeiten. Die Projekte, die diese verwenden, könntenimport
diesepoms
und dann die Abhängigkeiten angeben, die sie benötigen, ohne sich um die Version kümmern zu müssen. Dies ist im Wesentlichen dasbill of materials
Konzept, das in den von @ DB5 angegebenen Links dargestellt wird.Dies verhindert, dass
parent poms
komplexe Projekte mit mehreren Modulen zu groß und unhandlich werden.quelle
Zwei Konzepte, die dem objektorientierten Programmierparadigma sehr ähnlich sind, helfen bei der Beantwortung der Frage:
Der Abschnitt dependencyManagement deklariert nur die Abhängigkeiten und ihre Details im aktuellen Projekt. Der Zweck besteht in der Verwaltung der Details und der Wiederverwendung in anderen Projekten, entweder über Vererbung ( übergeordnet ) oder Import ( Bereich ). Dies ist so, als würde man einen Datentyp im Programm deklarieren und zur Verwendung bereitstellen.
Der Abhängigkeitsabschnitt definiert die tatsächliche Verwendung der Abhängigkeiten im Projekt und erbt optional die Details (dh die Version usw.) der unter dependencyManagment deklarierten Abhängigkeiten . Aus diesem Grund fehlen Abhängigkeiten, wenn Sie sie nur in dependencyManagment einfügen . Dies ist analog zum Instanziieren einer variablen Instanz eines Datentyps in einem Programm, in dem sie benötigt wird.
quelle