Primavera con Maven BOM

1. Panoramica

In questo breve tutorial, vedremo come Maven, uno strumento basato sul concetto di Project Object Model (POM), può utilizzare una BOM o "Bill Of Materials".

Per maggiori dettagli su Maven, puoi controllare il nostro articolo Apache Maven Tutorial.

2. Concetti di gestione delle dipendenze

Per capire cos'è una distinta base e per cosa possiamo usarla, dobbiamo prima imparare i concetti di base.

2.1. Cos'è Maven POM?

Maven POM è un file XML che contiene informazioni e configurazioni (sul progetto) utilizzate da Maven per importare le dipendenze e per costruire il progetto.

2.2. Cos'è Maven BOM?

BOM sta per Bill Of Materials. Una distinta materiali è un tipo speciale di POM utilizzato per controllare le versioni delle dipendenze di un progetto e fornisce un punto centrale per definire e aggiornare tali versioni.

BOM offre la flessibilità di aggiungere una dipendenza al nostro modulo senza preoccuparci della versione da cui dovremmo dipendere.

2.3. Dipendenze transitive

Maven può scoprire le librerie necessarie alle nostre dipendenze nel nostro pom.xml e le include automaticamente. Non c'è limite al numero di livelli di dipendenza da cui vengono raccolte le librerie.

Il conflitto qui si verifica quando 2 dipendenze si riferiscono a versioni diverse di uno specifico artefatto. Quale sarà incluso da Maven?

La risposta qui è la "definizione più vicina". Ciò significa che la versione utilizzata sarà quella più vicina al nostro progetto nell'albero delle dipendenze. Questa è chiamata mediazione delle dipendenze.

Vediamo il seguente esempio per chiarire la mediazione delle dipendenze:

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

Questo esempio mostra che il progetto A dipende da B ed E. B ed E hanno le proprie dipendenze che incontrano versioni differenti del manufatto D. L'artefatto D 1.0 verrà utilizzato nella compilazione di un progetto perché il percorso attraverso E è più breve.

Esistono diverse tecniche per determinare quale versione degli artefatti deve essere inclusa:

  • Possiamo sempre garantire una versione dichiarandola esplicitamente nella POM del nostro progetto. Ad esempio, per garantire che venga utilizzato D 1.4, dovremmo aggiungerlo esplicitamente come dipendenza nel file pom.xml .
  • Possiamo usare la sezione Gestione delle dipendenze per controllare le versioni degli artefatti, come spiegheremo più avanti in questo articolo.

2.4. Gestione delle dipendenze

In poche parole, la gestione delle dipendenze è un meccanismo per centralizzare le informazioni sulle dipendenze.

Quando abbiamo una serie di progetti che ereditano un genitore comune, possiamo inserire tutte le informazioni sulle dipendenze in un file POM condiviso chiamato BOM.

Di seguito è riportato un esempio di come scrivere un file BOM:

 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    

Come possiamo vedere, il BOM è un normale file POM con una sezione di gestione delle dipendenze dove possiamo includere tutte le informazioni e le versioni di un artefatto.

2.5. Utilizzo del file BOM

Ci sono 2 modi per utilizzare il precedente file BOM nel nostro progetto e poi saremo pronti a dichiarare le nostre dipendenze senza doversi preoccupare dei numeri di versione.

Possiamo ereditare dal genitore:

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

Come possiamo vedere il nostro progetto Test eredita il Baeldung-BOM.

Possiamo anche importare la BOM.

Nei progetti più grandi, l'approccio dell'ereditarietà non è efficiente perché il progetto può ereditare solo un singolo genitore. L'importazione è l'alternativa in quanto possiamo importare tutte le distinte base di cui abbiamo bisogno.

Vediamo come possiamo importare un file BOM nel nostro progetto POM:

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

2.6. Sovrascrittura della dipendenza BOM

L'ordine di precedenza della versione del manufatto è:

  1. La versione della dichiarazione diretta del manufatto nel nostro progetto pom
  2. La versione della risorsa nel progetto padre
  3. La versione nel pom importato, tenendo in considerazione l'ordine di importazione dei file
  4. mediazione delle dipendenze
  • Possiamo sovrascrivere la versione del manufatto definendo esplicitamente il manufatto nel pom del nostro progetto con la versione desiderata
  • Se lo stesso artefatto è definito con versioni diverse in 2 BOM importate, la versione nel file BOM dichiarata per prima vincerà

3. Distinta base di primavera

Potremmo scoprire che una libreria di terze parti, o un altro progetto Spring, crea una dipendenza transitiva da una versione precedente. Se ci dimentichiamo di dichiarare esplicitamente una dipendenza diretta, possono sorgere problemi imprevisti.

Per superare tali problemi, Maven supporta il concetto di dipendenza BOM.

Possiamo importare spring-framework-bom nella nostra sezione dependencyManagement per assicurarci che tutte le dipendenze Spring siano della stessa versione:

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

Non è necessario specificare l' attributo version quando utilizziamo gli artefatti Spring come nell'esempio seguente:

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

4. Conclusione

In questo breve articolo, abbiamo mostrato il concetto di distinta base di Maven e come centralizzare le informazioni e le versioni del manufatto in un POM comune.

In poche parole, possiamo ereditarla o importarla per sfruttare i vantaggi della distinta base.

Gli esempi di codice nell'articolo sono disponibili su GitHub.