Vår med Maven BOM

1. Oversikt

I denne raske opplæringen skal vi se på hvordan Maven, et verktøy basert på konseptet Project Object Model (POM), kan bruke en BOM eller "Bill of Materials".

For mer informasjon om Maven, kan du sjekke artikkelen vår Apache Maven Tutorial.

2. Avhengighetsstyringskonsepter

For å forstå hva en BOM er og hva vi kan bruke den til, må vi først lære grunnleggende konsepter.

2.1. Hva er Maven POM?

Maven POM er en XML-fil som inneholder informasjon og konfigurasjoner (om prosjektet) som brukes av Maven for å importere avhengigheter og for å bygge prosjektet.

2.2. Hva er Maven BOM?

BOM står for Bill Of Materials. En BOM er en spesiell type POM som brukes til å kontrollere versjonene av prosjektets avhengigheter og gi et sentralt sted å definere og oppdatere disse versjonene.

BOM gir fleksibiliteten til å legge til en avhengighet i modulen vår uten å bekymre oss for hvilken versjon vi bør stole på.

2.3. Transitive avhengigheter

Maven kan oppdage bibliotekene som er nødvendige av våre egne avhengigheter i vårt pom.xml og inkluderer dem automatisk. Det er ingen grense for antall avhengighetsnivåer som bibliotekene er samlet fra.

Konflikten her kommer når to avhengigheter refererer til forskjellige versjoner av en bestemt gjenstand. Hvilken vil bli inkludert av Maven?

Svaret her er den “nærmeste definisjonen”. Dette betyr at versjonen som brukes, vil være den nærmeste prosjektet vårt i avhengighetens tre. Dette kalles avhengighetsformidling.

La oss se følgende eksempel for å avklare avhengighetsformidlingen:

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

Dette eksemplet viser det prosjektet EN kommer an på B og E.B og E har sine egne avhengigheter som møter forskjellige versjoner av D gjenstand. Gjenstand D 1.0 vil bli brukt i byggingen av EN prosjekt fordi stien gjennom E er kortere.

Det er forskjellige teknikker for å bestemme hvilken versjon av gjenstandene som skal inkluderes:

  • Vi kan alltid garantere en versjon ved å erklære den eksplisitt i prosjektets POM. For eksempel for å garantere det D 1.4 brukes, bør vi legge det eksplisitt til som en avhengighet i pom.xml fil.
  • Vi kan bruke Avhengighetsstyring avsnitt for å kontrollere gjenstandsversjoner som vi vil forklare senere i denne artikkelen.

2.4. Avhengighetsstyring

Enkelt sagt, Dependency Management er en mekanisme for å sentralisere avhengighetsinformasjonen.

Når vi har et sett med prosjekter som arver en felles foreldre, kan vi legge all avhengighetsinformasjon i en delt POM-fil som heter BOM.

Følgende er et eksempel på hvordan du 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 stykklisten en normal POM-fil med en avhengighetLedelse seksjon der vi kan inkludere all informasjon og versjoner av en gjenstand.

2.5. Bruke BOM-filen

Det er to måter å bruke den forrige BOM-filen i prosjektet vårt, og så vil vi være klare til å erklære våre avhengigheter uten å måtte bekymre oss for versjonsnummer.

Vi kan arve fra foreldrene:

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

Som vi kan se, arver vårt test Baeldung-BOM.

Vi kan også importere stykklisten.

I større prosjekter er tilnærmingen til arv ikke effektiv fordi prosjektet bare kan arve en enslig forelder. Import er alternativet da vi kan importere så mange stykklisten som vi trenger.

La oss se hvordan vi kan importere en BOM-fil til prosjektet POM:

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

2.6. Overskriving avhengig av stykklist

Rekkefølgen av artefaktversjonen er:

  1. Versjonen av gjenstandens direkte erklæring i vårt prosjekt pom
  2. Versjonen av gjenstanden i foreldreprosjektet
  3. Versjonen i den importerte pom, med tanke på rekkefølgen for import av filer
  4. avhengighetsformidling
  • Vi kan overskrive artefaktversjonen ved å eksplisitt definere artefakten i prosjektets pom med ønsket versjon
  • Hvis den samme artefakten er definert med forskjellige versjoner i to importerte stykklister, vil versjonen i fillisten som ble erklært først vinne

3. Spring BOM

Vi kan oppdage at et tredjepartsbibliotek, eller et annet vårprosjekt, trekker inn en overgangsavhengighet til en eldre utgivelse. Hvis vi glemmer å eksplisitt erklære en direkte avhengighet, kan uventede problemer oppstå.

For å overvinne slike problemer støtter Maven begrepet BOM-avhengighet.

Vi kan importere vår-rammeverk-bom i vår avhengighetLedelse delen for å sikre at alle våravhengigheter er i samme versjon:

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

Vi trenger ikke å spesifisere versjon attributt når vi bruker vårartefakter som i følgende eksempel:

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

4. Konklusjon

I denne raske artikkelen viste vi Maven Bill-Of-Material Concept og hvordan man sentraliserer gjenstandens informasjon og versjoner i en felles POM.

Enkelt sagt, vi kan da enten arve eller importere den for å benytte BOM-fordelene.

Kodeeksemplene i artikkelen finner du på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found