À quoi sert <scope> sous <dependency> dans pom.xml?

179

En regardant la documentation http://maven.apache.org/surefire/maven-surefire-plugin/examples/testng.html , nous pouvons voir la <scope>balise sous<dependency>

Qu'est-ce que c'est et comment pouvons-nous l'utiliser pour exécuter des tests?

TDHM
la source
15
tout est très bien expliqué dans la documentation: maven.apache.org/guides/introduction/…
guido
duplication possible de la compréhension des dépendances de
compilation

Réponses:

266

L' <scope>élément peut prendre 6 valeurs: compiler , fourni , runtime , test , système et import .

Cette étendue est utilisée pour limiter la transitivité d'une dépendance et également pour affecter le chemin de classe utilisé pour diverses tâches de génération.

compiler

Il s'agit de la portée par défaut, utilisée si aucune n'est spécifiée. Les dépendances de compilation sont disponibles dans tous les chemins de classe d'un projet. De plus, ces dépendances sont propagées aux projets dépendants.

à condition de

Cela ressemble beaucoup à la compilation, mais indique que vous vous attendez à ce que le JDK ou un conteneur fournisse la dépendance au moment de l'exécution. Par exemple, lors de la création d'une application Web pour Java Enterprise Edition, vous définirez la dépendance sur l'API Servlet et les API Java EE associées sur l'étendue fournie car le conteneur Web fournit ces classes. Cette portée n'est disponible que sur le chemin de classe de compilation et de test, et n'est pas transitive.

Durée

Cette portée indique que la dépendance n'est pas requise pour la compilation, mais pour l'exécution. Il se trouve dans les chemins de classe d'exécution et de test, mais pas dans le chemin de classe de compilation.

tester

Cette portée indique que la dépendance n'est pas requise pour une utilisation normale de l'application et n'est disponible que pour les phases de compilation et d'exécution des tests.

système

Cette portée est similaire à celle fournie, sauf que vous devez fournir le JAR qui le contient explicitement. L'artefact est toujours disponible et n'est pas recherché dans un référentiel.

import (uniquement disponible dans Maven 2.0.9 ou version ultérieure)

Cette portée n'est utilisée que sur une dépendance de type pom dans la section. Il indique que le POM spécifié doit être remplacé par les dépendances dans la section de ce POM. Puisqu'elles sont remplacées, les dépendances avec une portée d'importation ne participent pas réellement à la limitation de la transitivité d'une dépendance.

Pour répondre à la deuxième partie de votre question:

Comment pouvons-nous l'utiliser pour exécuter des tests?

Notez que la testportée permet d'utiliser les dépendances uniquement pour la phase de test.

Lisez la documentation pour plus de détails.

Ortomala Lokni
la source
Donc, si vous utilisez "test", cela finit-il dans le fichier .jar créé?
markthegrea
1
et si une dépendance est nécessaire à la compilation et à l'exécution?
Albin
23

ajouté de bonnes images avec des portées explicatives

entrez la description de l'image ici

entrez la description de l'image ici

vaquar khan
la source
12

Six étendues de dépendance:

  • compile : portée par défaut, classpath est disponible pour src/mainetsrc/test
  • test : classpath est disponible poursrc/test
  • fourni : comme conforme mais fourni par JDK ou un conteneur au moment de l'exécution
  • runtime : non requis pour la compilation uniquement requis lors de l'exécution
  • système : fourni localement fournir un chemin de classe
  • import : peut uniquement importer d'autres POM dans le <dependencyManagement/>, uniquement disponible dans Maven 2.0.9 ou version ultérieure
Premraj
la source
4

La balise Scope est toujours utilisée pour limiter les dépendances transitives et la disponibilité du fichier jar au niveau du chemin de classe. Si nous ne fournissons aucune portée, la portée par défaut fonctionnera, c'est-à-dire Compile .

Mukesh
la source
11
Compiler signifie que vous avez besoin du JAR pour compiler et exécuter l'application. Pour une application Web, par exemple, le JAR sera placé dans le répertoire WEB-INF / lib. Fourni signifie que vous avez besoin du JAR pour la compilation, mais au moment de l'exécution, il existe déjà un JAR fourni par l'environnement, vous n'avez donc pas besoin qu'il soit fourni avec votre application. Pour une application Web, cela signifie que le fichier JAR ne sera pas placé dans le répertoire WEB-INF / lib. Pour une application Web, si le serveur d'application fournit déjà le JAR (ou ses fonctionnalités), utilisez «fourni», sinon utilisez «compiler».
Mukesh
1
s'il vous plaît ajouter votre commentaire dans votre réponse
Supun Wijerathne
0

Si nous ne fournissons aucune portée, la portée par défaut est compile.Si vous voulez confirmer, allez simplement à l'onglet Pom efficace dans l'éditeur eclipse, il vous montrera comme compile.

Umanath
la source
OP a demandé ce que la portée est et ne pas trouver ce que la portée par défaut est.
Wouter