Maven es una herramienta para la gestión y construcción de proyectos software, sobretodo para aquellos basados en lenguaje Java. Se trata de una herramienta similar, en cuanto a su objetivo, a *make* y *ant*, aunque con una orientación mayor a la configuración por convenio.
Actualmente es un proyecto de nivel superior de la `Apache Software Foundation`__, y lo podemos encontrar en la dirección: http://maven.apache.org.
__ http://www.apache.org
Los objetivos principales de maven son:
- Facilitar el proceso de compilación y construcción del proyecto.
- Generar documentación de calidad sobre el proyecto.
- Proporcionar guías de desarrollo basadas en buenas prácticas.
- Facilitar la migración transparente a nuevas funcionalidades de maven.
La configuración de un proyecto con maven se realiza a través del archivo *pom.xml*, en el que se describen las propiedades principales del proyecto, sus dependencias con otros módulos y componentes externos, así como la configuración de maven a aplicar sobre él mismo. En la web de maven tenemos una `guía de referencia del formato del archivo pom.xml`__
__ http://maven.apache.org/pom.html
Siguiendo la filosofía de configuración por convención, maven define una `estructura de proyecto por defecto de maven`__::
project
|-- pom.xml
`-- src
|-- main
| |-- java
| `-- resources
|
`-- test
|-- java
`-- resources
Si seguimos esta estructura (aunque si es distinta, se puede configurar), con una configuración básica podremos realizar las tareas típicas de cualquier proyecto Java, ya predefinidas en maven:
- Compilación de código.
- Empaquetado en archivos *.jar*, *.war* ó *.ear*.
- Generación de javadoc y otros informes.
- Ejecución de tests unitarios.
- etc.
__ http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html
Cada tarea viene determinada por un *objetivo* de maven, cuyo nombre se le pasa como parámetro. Ej::
mvn install
Existen dos versiones principales de maven, la 1.0.* y la 2.*. Esta última es la que emplearemos en gvSIG.
