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:
-
De bibliotheek trekt een enorme lading transitieve afhankelijkheden waarvan je er eigenlijk maar heel weinig nodig hebt, zodat je je project zonder reden opblaast.
-
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.