Frühling mit Maven Stückliste

1. Übersicht

In diesem kurzen Tutorial werden wir uns ansehen, wie Maven, ein Tool, das auf dem Konzept des Projektobjektmodells (POM) basiert, eine Stückliste oder „Stückliste“ verwenden kann.

Weitere Informationen zu Maven finden Sie in unserem Artikel Apache Maven Tutorial.

2. Abhängigkeitsmanagementkonzepte

Um zu verstehen, was eine Stückliste ist und wofür wir sie verwenden können, müssen wir zunächst grundlegende Konzepte lernen.

2.1. Was ist Maven POM?

Maven POM ist eine XML-Datei, die Informationen und Konfigurationen (zum Projekt) enthält, die von Maven zum Importieren von Abhängigkeiten und zum Erstellen des Projekts verwendet werden.

2.2. Was ist Maven Stückliste?

Stückliste steht für Stückliste. Eine Stückliste ist eine spezielle Art von Stückliste, mit der die Versionen der Abhängigkeiten eines Projekts gesteuert und ein zentraler Ort zum Definieren und Aktualisieren dieser Versionen bereitgestellt werden.

Die Stückliste bietet die Flexibilität, unserem Modul eine Abhängigkeit hinzuzufügen, ohne sich Gedanken über die Version machen zu müssen, von der wir abhängig sein sollten.

2.3. Transitive Abhängigkeiten

Maven kann die Bibliotheken, die von unseren eigenen Abhängigkeiten benötigt werden, in unserer pom.xml ermitteln und automatisch einschließen. Die Anzahl der Abhängigkeitsebenen, aus denen die Bibliotheken stammen, ist unbegrenzt.

Der Konflikt tritt hier auf, wenn sich 2 Abhängigkeiten auf verschiedene Versionen eines bestimmten Artefakts beziehen. Welches wird von Maven aufgenommen?

Die Antwort hier ist die "nächste Definition". Dies bedeutet, dass die verwendete Version unserem Projekt im Abhängigkeitsbaum am nächsten kommt. Dies wird als Abhängigkeitsvermittlung bezeichnet.

Sehen wir uns das folgende Beispiel an, um die Abhängigkeitsvermittlung zu verdeutlichen:

A -> B -> C -> D 1.4 and A -> E -> D 1.0

Dieses Beispiel zeigt , dass Projekt A hängt von B und E. B und E haben ihre eigenen Abhängigkeiten , die verschiedene Versionen der Begegnung D Artefakt. Artefakt D 1.0 wird beim Erstellen eines A- Projekts verwendet, da der Pfad durch E kürzer ist.

Es gibt verschiedene Techniken, um zu bestimmen, welche Version der Artefakte enthalten sein soll:

  • Wir können eine Version jederzeit garantieren, indem wir sie explizit im POM unseres Projekts deklarieren. Um beispielsweise sicherzustellen, dass D 1.4 verwendet wird, sollten wir es explizit als Abhängigkeit in die Datei pom.xml einfügen .
  • Wir können den Abschnitt Abhängigkeitsverwaltung verwenden , um Artefaktversionen zu steuern, wie wir später in diesem Artikel erläutern werden.

2.4. Abhängigkeitsmanagement

Einfach ausgedrückt ist das Abhängigkeitsmanagement ein Mechanismus zur Zentralisierung der Abhängigkeitsinformationen.

Wenn wir eine Reihe von Projekten haben, die ein gemeinsames übergeordnetes Element erben, können wir alle Abhängigkeitsinformationen in einer gemeinsam genutzten POM-Datei namens BOM ablegen.

Im Folgenden finden Sie ein Beispiel für das Schreiben einer Stücklistendatei:

 4.0.0 baeldung Baeldung-BOM 0.0.1-SNAPSHOT pom BaelDung-BOM parent pom    test a 1.2   test b 1.0 compile   test c 1.0 compile    

Wie wir sehen können, ist die Stückliste eine normale POM-Datei mit einem Abschnitt dependencyManagement, in dem alle Informationen und Versionen eines Artefakts enthalten sein können.

2.5. Verwenden der Stücklistendatei

Es gibt zwei Möglichkeiten, die vorherige Stücklistendatei in unserem Projekt zu verwenden. Anschließend können wir unsere Abhängigkeiten deklarieren, ohne uns um Versionsnummern kümmern zu müssen.

Wir können vom Elternteil erben:

 4.0.0 baeldung Test 0.0.1-SNAPSHOT pom Test  baeldung Baeldung-BOM 0.0.1-SNAPSHOT  

Wie wir sehen können, erbt unser Projekt Test die Baeldung-Stückliste.

Wir können auch die Stückliste importieren.

In größeren Projekten ist der Ansatz der Vererbung nicht effizient, da das Projekt nur ein einziges übergeordnetes Element erben kann. Der Import ist die Alternative, da wir so viele Stücklisten importieren können, wie wir benötigen.

Mal sehen, wie wir eine Stücklistendatei in unser Projekt POM importieren können:

 4.0.0 baeldung Test 0.0.1-SNAPSHOT pom Test    baeldung Baeldung-BOM 0.0.1-SNAPSHOT pom import    

2.6. Stücklistenabhängigkeit überschreiben

Die Rangfolge der Version des Artefakts lautet:

  1. Die Version der direkten Deklaration des Artefakts in unserem Projekt pom
  2. Die Version des Artefakts im übergeordneten Projekt
  3. Die Version im importierten POM unter Berücksichtigung der Reihenfolge des Importierens von Dateien
  4. Abhängigkeitsvermittlung
  • Wir können die Version des Artefakts überschreiben, indem wir das Artefakt im POM unseres Projekts explizit mit der gewünschten Version definieren
  • Wenn dasselbe Artefakt mit unterschiedlichen Versionen in 2 importierten Stücklisten definiert ist, gewinnt die zuerst deklarierte Version in der Stücklistendatei

3. Federstückliste

Möglicherweise stellen wir fest, dass eine Bibliothek eines Drittanbieters oder ein anderes Spring-Projekt eine transitive Abhängigkeit von einer älteren Version aufweist. Wenn wir vergessen, eine direkte Abhängigkeit explizit zu deklarieren, können unerwartete Probleme auftreten.

Um solche Probleme zu lösen, unterstützt Maven das Konzept der Stücklistenabhängigkeit.

Wir können das Spring-Framework-Bom in unseren Abschnitt dependencyManagement importieren, um sicherzustellen, dass alle Spring-Abhängigkeiten dieselbe Version haben:

   org.springframework spring-framework-bom 4.3.8.RELEASE pom import   

Wir müssen das Versionsattribut nicht angeben , wenn wir die Spring-Artefakte wie im folgenden Beispiel verwenden:

  org.springframework spring-context   org.springframework spring-web  

4. Fazit

In diesem kurzen Artikel haben wir das Maven Bill-Of-Material-Konzept gezeigt und gezeigt, wie die Informationen und Versionen des Artefakts in einem gemeinsamen POM zentralisiert werden.

Einfach ausgedrückt, können wir es dann entweder erben oder importieren, um die Vorteile der Stückliste zu nutzen.

Die Codebeispiele im Artikel finden Sie auf GitHub.