Frühling mit Maven BOM

Frühling mit Maven BOM

1. Überblick

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

Weitere Informationen zu Maven finden Sie in unserem ArtikelApache Maven Tutorial.

2. Konzepte für das Abhängigkeitsmanagement

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

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 BOM?

Stückliste steht für Stückliste. A BOM is a special kind of POM that is used to control the versions of a project’s dependencies and provide a central place to define and update those versions.

BOM bietet die Flexibilität, eine Abhängigkeit zu unserem Modul hinzuzufügen, ohne sich Gedanken über die Version zu machen, 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 unserenpom.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 zwei 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 das ProjektA vonB undE.B abhängt undE ihre eigenen Abhängigkeiten haben, die auf unterschiedliche Versionen des ArtefaktsD stoßen . Das ArtefaktD 1.0 wird beim Erstellen desA-Projekts verwendet, da der Pfad durchE 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 zu gewährleisten, dassD 1.4 verwendet wird, sollten wir es explizit als Abhängigkeit in diepom.xml-Datei einfügen.

  • Wir können den AbschnittDependency Management 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 eine gemeinsam genutzte POM-Datei mit dem Namen BOM einfügen.

Es folgt ein Beispiel zum Schreiben einer Stücklistendatei:



    4.0.0
    example
    example-BOM
    0.0.1-SNAPSHOT
    pom
    example-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 einemdependencyManagement-Abschnitt, in dem alle Informationen und Versionen eines Artefakts enthalten sein können.

2.5. Verwendung der Stücklistendatei

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

Wir können vom Elternteil erben:


    4.0.0
    example
    Test
    0.0.1-SNAPSHOT
    pom
    Test
    
        example
        example-BOM
        0.0.1-SNAPSHOT
    

Wie wir sehen können, erbt unser Projekt Test die Beispielstückliste.

Wir können auch die Stückliste importieren.

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

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


    4.0.0
    example
    Test
    0.0.1-SNAPSHOT
    pom
    Test

    
        
            
                example
                example-BOM
                0.0.1-SNAPSHOT
                pom
                import
            
        
    

2.6. Überschreiben der Stücklistenabhängigkeit

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 Version in der Stücklistendatei, die zuerst deklariert wurde

3. Frühlingsstückliste

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

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

Wir können diespring-framework-bom in unseren AbschnittdependencyManagement 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 Attributversionnicht 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 inover on GitHub.