El uso de Maven Scope es algo de lo más habitual ya que recordemos que todas las dependencias de Maven tienen varias propiedades algunas fijas y otras opcionales entre las opcionales estan los scopes. ¿Para que sirve exactamente un Maven Scope ? . Para ello lo primero que tenemos que hacer es mirar una dependencia de Maven . Por defecto las dependencias de Maven no incluyen scope simplemente groupid , artifactid y versión
<dependency> <groupId>org.hibernate.javax.persistence</groupId> <artifactId>hibernate-jpa-2.1-api</artifactId> <version>1.0.2.Final</version> </dependency>
Ahora bien el scope esta implícito en la dependencia el bloque xml anterior es idéntico al siguiente bloque:
<dependency> <groupId>org.hibernate.javax.persistence</groupId> <artifactId>hibernate-jpa-2.1-api</artifactId> <version>1.0.2.Final</version> <scope>compile</scope> </dependency>
Maven Scope Compile
Este es el scope por defecto y hace referencia a que necesitamos la dependencia para compilar el programa y para su uso más cotidiano. Es la situación más habitual . Al compilar el programa la dependencia es obligatoria y cuando usemos este artefacto la dependencia se añadirá
Scope Provided
Hay situaciones que necesitamos poder usar una dependencia para compilar el programa pero no necesitamos esa dependencia cuando el programa se despliega por ejemplo en un servidor de aplicaciones . En este caso podemos esta hablando por ejemplo de la dependencia de Servlets . La necesitamos para compilar el programa pero luego no la necesitaremos a nivel de Servidor ya que esta dependencia viene incluida en el servidor de aplicaciones
Scope Test
Es otro de los más clásicos e indica cuando una dependencia solo es necesaria para ejecutar pruebas unitarias . El caso más típico es el caso de Junit cuando lo incluimos en un proyecto ya que la necesitamos para ejecutar las pruebas unitarias pero no la necesitamos en el propio despliegue de la aplicación.
Maven Scope RunTime
Es un scope que es prácticamente inverso a los anteriores esta dependencia solo se usa en el caso de que la aplicación se vaya a ejecutar y solo se pasa al entorno de ejecución. Por ejemplo driver JDBC puede ser un buen caso de esto.
Maven Scope System
Este Scope es parecido al Scope de Provided con la única diferencia que hay que asignar una ruta en nuestro sistema a la librería esto puede ser en el caso de situaciones de Legacy.
Scope import
Este scope se usa a nivel interno de Maven en situaciones de <dependencyManagement>