Bij de configuratie van de afhankelijkheden kunnen we rekening houden met het werking gebied van een afhankelijkheid. Dit werking gebied noemen we de scope van een afhankelijkheid. Zo zijn er verschillende scopes die we hier even overlopen.
compile
Dit is de standaard scope voor afhankelijkheden. Als we geen scope definiëren wordt van deze scope uitgegaan. Bij deze scope wordt de afhankelijkheid vereist bij de compilatie van jouw project en wordt de afhankelijkheid ook mee verpakt met jouw module. Dit wil zeggen dat bij het runnen de afhankelijkheid ook nodig is.
Voor standaard frameworks en projecten is dit het meest gangbare. Vandaar dat dit ook de standaard is.
provided
De afhankelijkheid wordt toegevoegd aan het module pad tijdens de compilatie en is dus nodig om de bytecode op te bouwen. Maar de afhankelijkheid is niet nodig tijdens de uitvoering en wordt dus niet mee verpakt met de uitgaande JAR van je project.
Dit gaan we geregeld tegen komen wanneer we met servers werken. De Servers zullen zelf ook onderdelen geïnstalleerd staan hebben die het project kan gebruiken. Daarom hebben we enkel lokaal de afhankelijkheden nodig en bij de release is het niet nodig om die mee te verpakken.
runtime
De afhankelijkheid is niet vereist bij de compilatie maar is wel nodig wanneer de Jar gerund wordt. Hierbij kan men van Runtime gebruik maken. Dit is bijvoorbeeld goed als we lokaal een test databank gebruiken om op te werken en op de officiële applicatie een andere JDBC Driver nodig is. Op deze manier kunnen we de Drivers die nodig zijn mee verpakken.
test
Afhankelijkheden die enkel nodig zijn om tijdens de test cyclus te draaien krijgen deze scope. Deze worden dan enkel gebruikt voor de compilatie en executie van de testen. Daarna worden deze afhankelijkheden genegeerd en worden dus ook niet mee verpakt met de JAR van het project.
We gaan hier gebruik van maken bij bvb JUnit en de test databanken.
Laten we dit nu even in de parktijk behandelen door JUnit te gebruiken