Chaque dépendance de Maven a une portée qui définit sur quel classpath cette dépendance est disponible.
Lorsque vous créez un JAR pour un projet, les dépendances ne sont pas regroupées avec l'artefact généré ; elles sont utilisées uniquement pour la compilation. (Cependant, vous pouvez toujours faire en sorte que maven inclue les dépendances dans le jar construit, voir : Inclure les dépendances dans un jar avec Maven )
Lorsque vous utilisez Maven pour créer un fichier WAR ou EAR, vous pouvez configurer Maven pour qu'il regroupe les dépendances avec l'artefact généré, et vous pouvez également le configurer pour qu'il exclue certaines dépendances du fichier WAR à l'aide de la commande provided
l'étendue.
Le champ d'application le plus courant - compile
- indique que la dépendance est disponible pour votre projet sur le classpath de compilation, les classpaths de compilation et d'exécution des tests unitaires, et l'éventuel classpath d'exécution lorsque vous exécutez votre application. Dans une application Web Java EE, cela signifie que la dépendance est copiée dans votre application déployée. Dans un fichier JAR cependant, les dépendances sont no être inclus lorsque le compile
est utilisé.
runtime
scope indique que la dépendance est disponible pour votre projet sur les classpaths d'exécution des tests unitaires et d'exécution du runtime, mais contrairement à l'indicateur compile
le champ d'application n'est pas disponible lorsque vous compilez votre application ou ses tests unitaires. Une dépendance d'exécution est copiée dans votre application déployée, mais elle n'est pas disponible pendant la compilation. Cela permet de s'assurer que vous ne dépendez pas par erreur d'une bibliothèque spécifique. Imaginons que vous utilisiez une implémentation de journalisation spécifique, mais que vous souhaitiez uniquement importer une façade de journalisation dans votre code source. Vous incluriez la bibliothèque de journalisation concrète avec un runtime
afin de ne pas s'y fier par erreur.
Enfin, provided
indique que le conteneur dans lequel votre application s'exécute fournit la dépendance en votre nom. Dans une application Java EE, cela signifie que la dépendance se trouve déjà dans le classpath du conteneur de servlets ou du serveur d'applications et que le nom de la dépendance est déjà sur la page d'accueil. n'est pas copié dans votre application déployée. Cela signifie également que vous avez besoin de cette dépendance pour compiler votre projet.
2 votes
Vous pouvez utiliser la réflexion, et utiliser des classes qui n'étaient pas disponibles au moment de la compilation. Pensez "plugin".