Continuando con nuestro artículo anterior hoy hablaremos sobre el manejo de las dependencias e IDEs con soporte de Maven.
Problemática
Hasta antes de la aparición de Maven el manejo de las librerías JAR que utilizaba cada proyecto se hacía de manera manual, las librerías normalmente eran almacenadas junto con el código fuente para que no se perdieran.
Muchos de los proyectos manejaban el mismo conjunto de librerías sin embargo éstas se duplicaban por seguridad y porque normalmente el arquitecto era la única persona que sabía exactamente qué versión de librerías debían ser incluidas en cada uno.
Maven resuelve la mayoría de los problemas de administración de las librerías (JAR) mediante un repositorio centralizado y un mecanismo para la inclusión de dependencias.
¿Qué es una dependencia?
Una dependencia es una referencia en el POM de la librería que se desea incluir en el proyecto. Por ejemplo si deseamos incluir la librería para el manejo de JUnit debemos declararlo de la siguiente manera:
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.5</version> </dependency> </dependencies>
Como vimos en el artículo anterior los objetos en el repositorio se identifican mediante 3 tags groupId:artifactId:version
¿Cómo se estructura el repositorio de Maven?
Maven maneja 3 niveles de repositorio: local, empresarial, global.
El repositorio local normalmente conocido como .m2 se guarda localmente en nuestra pc (En Windows se almacena en “documents and settings” y en linux en nuestro “home”). Dentro de ella encontramos los JAR, WAR, etc en una jerarquía de carpetas que siguen el mismo concepto groupId:artifactId:version.
Veamos un ejemplo de un repositorio local estándar:

El repositorio Empresarial tiene la misma estructura que el repositorio local con la diferencia que almacena librerías de uso compartido a nivel de red. Los repositorios empresariales normalmente se utilizan cuando se maneja un equipo de desarrolladores que trabaja sobre un conjunto variado de proyectos, los cuales normalmente tienen interdependencia entre ellos y sus librerías.
Los repositorios globales son repositorios públicos que almacenan librerías de uso compartido, como por ejemplo el repositorio mismo de Maven o el repositorio público de JBoss o maven central.
Cuando el proceso de compilación busca las dependencias del proyecto lo primero que hace es buscarlas en el repositorio local, si no las encuentra recurre a sus repositorios empresariales (definido en un archivo .settings.xml) o de red y en caso de no encontrar ahí los JAR necesarios los busca en los repositorios globales.
Es importante notar que una vez ubicado un JAR en alguno de los repositorios externos Maven inmediatamente lo descarga al repositorio local por lo que si uno desea que siempre se actualice el JAR de los repositorios externos debe incluir –U en el comando (ejemplo mvn clean install –U ).
El uso de repositorios Empresariales está íntimamente ligado al uso de la metodología de integración continua por lo que les recomiendo leer la entrada Integración continua.
Ámbito de las dependencias
Existen seis ámbitos en los que una dependencia puede ser declarada limitando así su transitividad:
Compile, es el ámbito por defecto. Las dependencias están disponibles en el proyecto y en sus proyectos dependientes.
Provided, se espera que el JDK, la aplicación o el contenedor provea la dependencia.
Runtime, la dependencia no es requerida en tiempo de compilación pero sí para la ejecución.
Test, son dependencias que son requeridas solo cuando se compila y ejecuta los test.
System, similar a provided pero se le debe indicar el jar que contiene la dependencia
Import, (a partir a la version 2.0.9) solo es usado en una dependencia del tipo POM en la sección . Indica que el POM utilizado debe ser remplazado con las dependencias que éste tenga en su sección
Cómo usar maven en Netbeans
En Antartec usamos Netbeans como la plataforma por defecto para el desarrollo de aplicaciones web al proveer de manera integrada la mayoría de componentes necesarios para nuestro trabajo.
Pasos para trabajar en Netbeans con Maven
1. Instalar Netbeans (Lo pueden desargar de www.netbeans.org)
2. En el menú seleccionar Herramientas – plugins
3. En la sección “Plugins disponibles” seleccionar el plugin Maven y hacer clic en Instalar.
4. Reiniciar el netbeans, con eso netbeans reconoce y permite crear proyectos maven desde cero.
Related posts:

Hola
tengo una duda sobre crear .jar utilizando Maven .
El problema qu tengo es el siguiente : en primer lugar , he creado un proyecto con Maven donde todas las clases las he puesto dentro del directorio /src/main . Este proyecto depende de 2 .jar ( logj4.jar y RXTXComm.jar ) , que a partir del pom.xml los incluyo en el repositorio local de Maven . Después hago un Run package de todo el proyecto y obtengo el .jar , pero el problema que tengo es que el .jar de todo el proyecto que he obtenido contiene solo las clases pero no contiene los .jar de los qu dependen esas clases . Es decir , qu el .jar que he creado no contiene ni logj4.jar ni RXTXComm.jar .
Parece ser que esta opción se debe configurar con el campo Scope del pom.xml. La duda que tengo es cómo tengo que configurar el pom.xml para qu al hacer un run package se genere un .jar que contenga los .jar dependientes ( logj4.jar y RXTXComm.jar ) y que se pueda utilizar en otro proyecto . ( Dentro del pom.xml he configurado el campo Scope de los .jar como testing) .
Muchas gracias de antemano
Hola Gorsanmo
El problema es que estas configurando la dependencia como test.
Existen 6 scopes disponibles:
compile (Jars disponibles en tiempo de compilación y ejecución).
provided (Se asume que el JDK o el contendor proveerá los jars).
runtime (Sólo disponibles en tiempo de ejecución).
test (Disponibles sólo cuando haces test).
system (Similar a provided).
import (usado como tipo de dependencia en el dependency managment).
Cuando no se especifica un scope maven asume que es scope compile que en tu caso parece ser el adecuado.
Excelente tutorial sobre maven.
Un saludo.