Wanneer “optionele” afhankelijkheden gebruiken en wanneer “opgegeven” bereik gebruiken?

Afhankelijkheden gedecoreerd met <optional>true</optional>of <scope>provided</scope>worden genegeerd wanneer ze transitief afhankelijk zijn. Ik heb dit, ik begrijp het verschil tussen @Component en @Service in het voorjaar, ze verschillen alleen semantisch.

Is het goed?


Antwoord 1, autoriteit 100%

Naast de opmerking is er nog een belangrijker semantischverschil: “Geleverde” afhankelijkheden worden naar verwachting geleverd door de container, dus als uw container u een slaapstand geeft, moet u de slaapstand markeren als verstrekt .

Optionele afhankelijkheden worden voornamelijk gebruikt om de transitieve belasting van sommige bibliotheken te verminderen. Bijvoorbeeld: als u een bibliotheek met 5 verschillende databasetypes kunt gebruiken, maar u heeft er meestal maar één nodig, dan kunt u de bibliotheekafhankelijke afhankelijkheden markeren als optioneel, zodat de gebruiker degene kan opgeven die hij daadwerkelijk gebruikt. Als u dit niet doet, kunt u twee soorten problemen krijgen:

  1. De bibliotheek trekt een enorme lading transitieve afhankelijkheden waarvan je er eigenlijk maar heel weinig nodig hebt, zodat je je project zonder reden opblaast.

  2. Gevaarlijker: je zou twee bibliotheken met overlappende klassen kunnen ophalen, zodat de klassenlader ze niet allebei kan laden. Dit kan leiden tot onverwacht gedrag van uw bibliotheek.


Antwoord 2, autoriteit 8%

Een klein verschil waar ik op wil wijzen is de behandeling van optionele versus aangeboden door verschillende plug-ins die pakketten maken.

Blijkbaar zal de war-plug-in geen optionele afhankelijkheden verpakken, maar er is een openstaande bug: https://issues.apache.org/jira/browse/MWAR-351

De montage-plug-in lijkt geen manier te bieden om te filteren op optionele status, terwijl u wel kunt filteren op basis van bereik.

Het lijkt erop dat hetzelfde geldt voor de schaduw-plug-in.

TL;DR als u geen bibliotheek aan het ontwikkelen bent, maar een toepassing op het hoogste niveau biedt u meer flexibiliteit.

Other episodes