Peut-être cette question semble être un cliché, mais ça me dérange quelque peu. Qu'elle différence entre l'utilisation de maven portée compile
et provided
lors de l'artefact est bâtie comme un POT? Si c'était la GUERRE, alors je comprends - artefact serait attaché ou non à la WEB-INF/lib. Mais dans le cas du POT, il n'a pas d'importance - les dépendances ne sont pas attachés. Ils doivent être sur le chemin de classe lors de leur champ d'application est - compile
ou provided
. Je sais qu' provided
dépendances ne sont pas transitives - mais est-il seulement une différence?
Réponses
Trop de publicités?Compiler signifie que vous avez besoin de la JARRE de la compilation et de l'exécution de l'application. Pour une application web, par exemple, le POT va être placé dans le dossier WEB-INF/lib du répertoire.
À condition signifie que vous devez le POT pour la compilation, mais au moment de l'exécution, il est déjà un POT offertes par l'environnement de sorte que vous n'avez pas besoin emballés avec votre application. Pour une application web, cela signifie que le fichier JAR ne seront pas placés dans le WEB-INF/lib du répertoire.
Pour une application web, si le serveur d'applications fournit déjà le POT (ou de ses fonctionnalités), puis utilisez la "condition" d'utiliser autrement de "compiler".
À partir de l' Maven Doc:
- compiler
C'est l'étendue par défaut, utilisé si aucun n'est spécifié. Compiler les dépendances sont disponibles dans tous les chemins de classe d'un projet. En outre, ces dépendances sont propagées à projets dépendants.
- fourni
C'est un peu comme de la compilation, mais indique que vous attendez le JDK ou un conteneur pour fournir la dépendance au moment de l'exécution. Par exemple, lorsque création d'une application web pour le Java Enterprise Edition, vous définir la dépendance sur l'API Servlet et liées à Java EE Api pour portée prévue parce que le conteneur web fournit ces classes. Cette champ d'application est uniquement disponible sur la compilation et de test classpath, et est pas transitive.
Récapitulatif:
- les dépendances ne sont pas transitives (comme vous l'avez mentionné)
- fourni champ d'application est uniquement disponible sur la compilation et de test classpath, alors que le champ d'application de la compilation est disponible dans tous les chemins de classe.
- fourni les dépendances ne sont pas emballés