Facultatieve afhankelijkheid in Maven

1. Overzicht

Deze korte tutorial beschrijft Maven's tag en hoe we het kunnen gebruiken om de grootte en reikwijdte van het artefact van een Maven-project te verkleinen, zoals een WAR, EAR of JAR.

Bekijk onze uitgebreide gids voor een opfriscursus over Maven.

2. Wat is ?

Soms maken we een Maven-project als afhankelijkheid voor andere Maven-projecten. Wanneer u aan een dergelijk project werkt, kan het nodig zijn om een ​​of meer afhankelijkheden op te nemen die alleen nuttig zijn voor een subset van de kenmerken van dat project.

Als een eindgebruiker die functiesubset niet gebruikt, haalt het project die afhankelijkheden nog steeds tijdelijk op. Dit vergroot de projectgrootte van de gebruiker onnodig en kan zelfs conflicterende afhankelijkheidsversies introduceren met andere projectafhankelijkheden.

Idealiter zouden we de feature-subset van het project opsplitsen in zijn eigen module en daarom de rest van het project niet vervuilen. Dit is echter niet altijd praktisch.

Om deze speciale afhankelijkheden van het hoofdproject uit te sluiten, kunnen we Maven's toepassen tag aan hen. Dit dwingt elke gebruiker die deze afhankelijkheden wil gebruiken om ze expliciet te declareren. Het dwingt die afhankelijkheden echter niet tot een project dat ze niet nodig heeft.

3. Hoe te gebruiken

Zoals we zullen zien, kunnen we de element met een waarde van waar om elke Maven-afhankelijkheid optioneel te maken.

Laten we aannemen dat we het volgende project pom hebben:

 ... project-met-opties ... com.baeldung optional-project 0.0.1-SNAPSHOT waar 

In dit voorbeeld, hoewel optioneel-project wordt gelabeld als optioneel, het blijft een bruikbare afhankelijkheid van project-met-opties alsof de tag was er nooit.

Om het effect van de tag, moeten we een nieuw project maken dat afhankelijk is van project-met-opties:

 ... hoofdproject ... com.baeldung project-met-opties 0.0.1-SNAPSHOT 

Als we nu proberen te verwijzen optioneel-project van binnenuit hoofdproject, we zien dat optioneel-project bestaat niet. Dit komt doordat de tag voorkomt dat het tijdelijk wordt opgenomen.

Als we vinden dat we het nodig hebben optioneel-project in onze hoofdproject, we hoeven het alleen maar als een afhankelijkheid aan te geven.

4. Conclusie

In dit artikel hebben we gekeken naar Maven's label. De belangrijkste voordelen van het gebruik van de tag zijn dat het de grootte van een project kan verkleinen en versieconflicten kan helpen voorkomen. We hebben ook gezien dat de tag geen invloed heeft op het project dat deze gebruikt.

De broncode in dit artikel is beschikbaar op Github.