Forår med Maven BOM

1. Oversigt

I denne hurtige vejledning skal vi se på, hvordan Maven, et værktøj baseret på begrebet Project Object Model (POM), kan gøre brug af en BOM eller "Bill of Materials".

For flere detaljer om Maven kan du tjekke vores artikel Apache Maven Tutorial.

2. Afhængighedsstyringskoncepter

For at forstå hvad en stykliste er, og hvad vi kan bruge den til, skal vi først lære grundlæggende begreber.

2.1. Hvad er Maven POM?

Maven POM er en XML-fil, der indeholder information og konfigurationer (om projektet), der bruges af Maven til at importere afhængigheder og til at opbygge projektet.

2.2. Hvad er Maven BOM?

BOM står for Bill Of Materials. En stykliste er en speciel type POM, der bruges til at kontrollere versionerne af et projekts afhængigheder og give et centralt sted at definere og opdatere disse versioner.

BOM giver fleksibiliteten til at tilføje en afhængighed af vores modul uden at bekymre sig om den version, som vi skal stole på.

2.3. Transitive afhængigheder

Maven kan opdage de biblioteker, der er nødvendige af vores egne afhængigheder i vores pom.xml og inkluderer dem automatisk. Der er ingen grænse for antallet af afhængighedsniveauer, som bibliotekerne er samlet fra.

Konflikten her kommer, når to afhængigheder henviser til forskellige versioner af en bestemt artefakt. Hvilken vil blive inkluderet af Maven?

Svaret her er den "nærmeste definition". Dette betyder, at den anvendte version vil være den nærmeste til vores projekt i afhængighedstræet. Dette kaldes afhængighedsformidling.

Lad os se følgende eksempel for at afklare afhængighedsformidlingen:

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

Dette eksempel viser dette projekt EN afhænger af B og E.B og E har deres egne afhængigheder, der støder på forskellige versioner af D artefakt. Artefakt D 1.0 vil blive brugt til build af EN projekt, fordi stien igennem E er kortere.

Der er forskellige teknikker til at bestemme, hvilken version af artefakterne skal medtages:

  • Vi kan altid garantere en version ved at erklære den eksplicit i vores projekts POM. For eksempel for at garantere det D 1.4 bruges, skal vi eksplicit tilføje det som en afhængighed i pom.xml fil.
  • Vi kan bruge Afhængighedsstyring afsnit for at kontrollere artefaktversioner, som vi vil forklare senere i denne artikel.

2.4. Afhængighedsstyring

Kort sagt, Dependency Management er en mekanisme til at centralisere afhængighedsoplysninger.

Når vi har et sæt projekter, der arver en fælles forælder, kan vi placere alle afhængighedsoplysninger i en delt POM-fil kaldet BOM.

Følgende er et eksempel på, hvordan man skriver en BOM-fil:

 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 

Som vi kan se, er styklisten en normal POM-fil med en afhængighedLedelse sektion, hvor vi kan inkludere alle oplysninger om en artefakt og versioner.

2.5. Brug af BOM-filen

Der er 2 måder at bruge den tidligere BOM-fil i vores projekt på, og så vil vi være klar til at erklære vores afhængighed uden at skulle bekymre os om versionsnumre.

Vi kan arve fra forældrene:

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

Som vi kan se, arver Test vores Baeldung-BOM.

Vi kan også importere styklisten.

I større projekter er arvemetoden ikke effektiv, fordi projektet kun kan arve en enlig forælder. Import er alternativet, da vi kan importere så mange styklister, som vi har brug for.

Lad os se, hvordan vi kan importere en BOM-fil til vores projekt POM:

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

2.6. Overskrivning af BOM-afhængighed

Rækkefølgen af ​​artefaktens version er:

  1. Versionen af ​​artefaktens direkte erklæring i vores projekt pom
  2. Versionen af ​​artefakten i det overordnede projekt
  3. Versionen i den importerede pom under hensyntagen til rækkefølgen af ​​import af filer
  4. afhængighedsformidling
  • Vi kan overskrive artefaktens version ved eksplicit at definere artefakten i vores projekts pom med den ønskede version
  • Hvis den samme artefakt er defineret med forskellige versioner i 2 importerede styklister, vinder versionen i styklistefilen, der blev erklæret først

3. Spring BOM

Vi kan finde ud af, at et tredjepartsbibliotek eller et andet Spring-projekt trækker en midlertidig afhængighed af en ældre udgivelse. Hvis vi glemmer at udtrykkeligt erklære en direkte afhængighed, kan der opstå uventede problemer.

For at overvinde sådanne problemer understøtter Maven begrebet BOM-afhængighed.

Vi kan importere spring-framework-bom i vores afhængighedLedelse sektion for at sikre, at alle forårsafhængigheder er i samme version:

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

Vi behøver ikke at specificere version attribut når vi bruger forårets artefakter som i følgende eksempel:

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

4. Konklusion

I denne hurtige artikel viste vi Maven Bill-Of-Material Concept og hvordan man centraliserer artefaktens information og versioner i en fælles POM.

Kort sagt kan vi enten arve eller importere det for at gøre brug af BOM-fordelene.

Kodeeksemplerne i artiklen kan findes på GitHub.