Dipendenza facoltativa in Maven

1. Panoramica

Questo breve tutorial descriverà Maven's e come possiamo usarlo per ridurre le dimensioni e l'ambito di un artefatto di un progetto Maven, come WAR, EAR o JAR.

Per un aggiornamento su Maven, consulta la nostra guida completa.

2. Che cos'è ?

A volte creeremo un progetto Maven come dipendenza per altri progetti Maven. Quando si lavora su un progetto di questo tipo, potrebbe essere necessario includere una o più dipendenze utili solo per un sottoinsieme delle funzionalità di quel progetto.

Se un utente finale non utilizza quel sottoinsieme di funzionalità, il progetto estrae comunque in modo transitorio quelle dipendenze. Ciò aumenta inutilmente le dimensioni del progetto dell'utente e potrebbe persino introdurre versioni di dipendenze in conflitto con altre dipendenze del progetto.

Idealmente, dovremmo dividere il sottoinsieme di funzionalità del progetto in un proprio modulo e quindi non inquinare il resto del progetto. Tuttavia, questo non è sempre pratico.

Per escludere queste dipendenze speciali dal progetto principale, possiamo applicare Maven's tag a loro. Ciò costringe qualsiasi utente che desidera utilizzare tali dipendenze a dichiararle esplicitamente. Tuttavia, non forza quelle dipendenze in un progetto che non ne ha bisogno.

3. Come usare

Come vedremo, possiamo includere il file elemento con un valore true per rendere facoltativa qualsiasi dipendenza Maven.

Supponiamo di avere il seguente progetto pom:

 ... project-with-optionals ...   com.baeldung optional-project 0.0.1-SNAPSHOT true   

In questo esempio, sebbene il progetto-opzionale sia etichettato come opzionale, rimane come una dipendenza utilizzabile del progetto-con-opzioni come se il tag non è mai stato lì.

Per vedere l'effetto di tag, dobbiamo creare un nuovo progetto che dipenda da project-with-optionals :

 ... main-project ...   com.baeldung project-with-optionals 0.0.1-SNAPSHOT   

Ora, se proviamo a fare riferimento a progetto-opzionale dall'interno di progetto-principale , vediamo che progetto-opzionale non esiste. Questo perché il tag impedisce che venga incluso transitivamente.

Se troviamo che abbiamo bisogno di optional-project nel nostro main-project , dobbiamo semplicemente dichiararlo come dipendenza.

4. Conclusione

In questo articolo, abbiamo esaminato Maven's etichetta. I principali vantaggi dell'utilizzo del tag sono che può ridurre le dimensioni di un progetto e aiutare a prevenire conflitti di versione. Abbiamo anche visto che il tag non influisce sul progetto che lo utilizza.

Il codice sorgente in questo articolo è disponibile su Github.