Introducción a m2eclipse
Introductiontom2eclipse.jpg
88x31.png

Esta obra está bajo una licencia de Creative Commons por expreso deseo de los autores del trabajo original.

Traducción realizada por José Manuel Beas del original publicado en TheServerSide.

Eclipse es el IDE para desarrollo Java más usado hoy día. Al mismo tiempo, Apache Maven continúa madurando y ha crecido hasta ser el estándar de la industria para crear "builds" extensibles y fiables a nivel empresarial. A pesar de que ciertamente es posible desarrollar aplicaciones en Eclipse y usar Maven desde la linea de comandos, la mayoría de los desarrolladores esperan que el IDE sepa cómo llamar e interactuar con la herramienta de construcción que están usando.

Entremos en m2eclipse. El proyecto m2eclipse proporciona soporte para Maven desde dentro de Eclipse. Éste es un "plugin" que ayuda a salvar las diferencias entre Maven y Eclipse. Usando m2eclipse podemos desarrollar a gran proyecto multimodular con módulos Maven anidados y tener esta estructura jerárquica reflejada en nuestro Eclipse. Usando m2eclipse, podemos lanzar y manejar la construcción de nuestros proyectos con Maven usando editores y nuestro IDE estará al tanto de los repositorios Maven (el local y los remotos) permitiéndonos buscar y localizar rápidamente cualquier artefacto disponible en el repositorio Maven. m2eclipse también cambiará la manera de crear los proyectos con una interfaz novedosa y fácil de usar para crear proyecto a partir de Arquetipos Maven.

En este artículo, exploraremos las caracteríticas que proporciona m2eclipse y ayudaremos a empezar a usar un plugin Eclipse que proporciona integración real con Maven para la mejor plataforma IDE disponible. Después de leer este artículo deberíais tener suficiente información para instalar el plugin m2eclipse y comenzar a crear o importar proyectos Maven en vuestro espacio de trabajo ("workspace") Eclipse. También tendréis una idea acerca de las posibilidades que ofrece el plugin.

Nota: Este artículo (el original) es una versión mejorada del capítulo publicado como parte de Maven: The Definitive Guide, un libro "online" y gratuito de Sonatype que ha publicado O'Reilly en Septiembre de 2008. Para más noticias acerca de m2eclipse, por favor visitad http://m2eclipse.sonatype.org.

¿Qué es m2eclipse?

m2eclipse es un "plugin" Eclipse que está desde principios de 2006. El plugin fue creado a principios de 2006 por Eugene Kuleshov y fue desarrollado bajo el auspicio de la comunidad Codehaus durante dos años. En mayo de 2008, el proyecto m2eclipse fue formalmente aceptado en la Fundación Eclipse y el plugin continúa siendo desarrollado para integrar en m2eclipse más características de la plataforma Eclipse.

El "plugin" m2eclipse proporciona integración con Maven para Eclipse. m2eclipse también tiene enganches ("hooks") para las características de sendos "plugins" Subclipse y Mylyn. El "plugin" Subclipse proporciona al "plugin" m2eclipse la posibilidad de interaccionar con repositorios de Subversion y el "plugin" Mylyn proporciona al "plugin" m2eclipse con la posibilidad de interactuar con una interfaz enfocada en la tarea ("task-focused UI") que puede llevar la cuenta del contexto de desarrollo. Sólo unas pocas características proporcionadas por m2eclipse y que incluyen:

  • Creación e importación de proyectos Maven
  • Gestión de las dependencias e integración con el "classpath" de Eclipse
  • Descarga y actualización automática de dependencias
  • Resolución de artefactos javadoc y de código fuente
  • Creación de proyectos con Arquetipos Maven
  • Navegación y búsqueda en repositorios Maven remotos
  • Gestión de POMs con actualización automática de la lista de dependencias
  • Materialización de un proyecto a partir de un POM Maven
  • Obtención ("check out") de un proyecto Maven a partir de varios repositorios de control de versiones1 (SCM)
  • Adaptación de proyectos Maven anidados y multimodulares en Eclipse
  • Integración con el proyecto Web Tools (WTP)
  • Integración con las herramientas de desarrollo AspectJ (AJDT)
  • Integración con Subclipse, un "plugin" Subversion para Eclipse
  • Integración con Mylyn, un "plugin" que proporciona un contexto orientado a las tareas e integración con herramientas como JIRA y otros sistemas de gestión de defectos/tareas.

El desarrollo del "plugin" está actualmente enfocado en proporcionar "soporte de primera clase" para la plataforma de Eclipse Web Tools y las herramientas Eclipse para AspectJ, así como añadir editores gráficos tanto para el POM como para el fichero settings.xml de Maven. Hay muchas más características en m2eclipse más allá de la lista anterior y este artículo estudiará algunas de las mismas que están actualmente disponibles. Empecemos por la instalación de m2eclipse en Eclipse.

Instalando el "plugin" m2eclipse

Para instalar el "plugin" m2eclipse es necesario instalar algunos prerrequisitos. Necesitaremos Eclipse 3.2 o superior, JDK 1.4 o superior y además nos tendremos que asegurar de que Eclipse se ejecuta sobre un JDK y no sobre un JRE. Este artículo asume que instalamos m2eclipse sobre Eclipse 3.3 (Europa) y que ya hemos descargado e instalado Eclipse. Si aún no lo habéis hecho, lo podéis descargar de http://www.eclipse.org/downloads/.

Instalando los prerrequisitos

Podemos instalar estos prerrequisitos cuando instalemos m2eclipse, simplemente añadamos a Eclipse un nuevo sitio remoto de actualización para cada componente prerrequerido. Para instalar estos prerrequisitos, id a "Help / Software Updates / Find and Install…". Al seleccionar esta opción de menu se abrirá el diálogo "Install/Update". Elegid la opción "Search for new features to install" y pulsad en "Next". Obtendréis una lista de "Update sites to visit". Pulsad en "New Remote Site"… y añadid un nuevo sitio para cada nuevo prerequisito. Añadid un nuevo sitio remoto para cada plugin y entonces aseguraos de que el sitio remoto está seleccionado. Después de pulsar "Finish", Eclipse nos solicitará entonces que seleccionemos "plugins" para instalar. Seleccionad los componentes que queráis instalar y Eclipse descargará, instalará y configurará vuestros plugins.2

Para instalar la integración de JIRA con Mylyn, añadid el URL de actualización de los extras de Mylyn. Querréis hacer testo si vuestra organización usa JIRA para el seguimiento de defectos. Si estáis instalando la versión 0.9.4 de m2eclipse quizás queráis instalar también los proyectos Web Tools Platform (WTP) y AspectJ Development Tools (AJDT).

Para más información:

Instalando el plugin m2eclipse

Una vez que hayamos instalado los prerrequisitos, podemos instalar el plugin m2eclipse desde el siguiente URL de actualización:

Si preferís instalar la última versión de desarrollo "snapshot" del plugin, deberíais usar el URL update-dev en vez del anterior URL:

Para instalar m2eclipse, simplemente añadid el sitio de actualización apropiado para m2eclipse. Como para los prerrequisitos, id a "Help / Software Updates / Find and Install…". Al seleccionar esta opción de menu se abrirá el diálogo "Install/Update". Elegid la opción "Search for new features to install" y pulsad en "Next". Obtendréis una lista de "Update sites to visit". Pulsad en "New Remote Site"… y añadid un nuevo sitio para m2eclipse. Añadid un nuevo sitio remoto para m2eclipse y entonces aseguraos de que el sitio remoto está seleccionado. Después de pulsar "Finish", Eclipse nos solicitará entonces que seleccionemos "plugins" para instalar. Seleccionad los componentes que queráis instalar y Eclipse descargará, instalará y configurará m2eclipse.

Si ya habéis instalado el plugin con éxito, deberíais ver una opción Maven en la lista de preferencias cuando vayáis a "Window / Preferences…".
Habilitando la Consola Maven

Después de instalar el plugin m2eclipse, una de las primeras cosas que querréis hacer es habilitar la Consola Maven. Cuando imporáis un proyecto Maven o creáis un nuevo proyecto Maven, querréis ver la consola Maven para ver lo que está haciendo el plugin m2eclipse. Para habilitar la Consola Maven, abrid la vista de consola (Console View) yendo a "Window / Show View / Console". Entonces pulsad en la pequeña flecha a la derecha del icono "Open Console" y seleccionad "Maven Console" como se muestra más abajo:

Figura 1. Habilitando la Consola Maven en Eclipse

eclipse_console.gif

La Consola Maven muestra la salida de Maven que normalmente aparece en la consola cuando ejecutamos Maven desde la linea de comandos. Es útil poder ver lo que Maven está hacinedo y trabajar con la salida de depuración para diagnosticar problemas.

Creando un Proyecto Maven

Cuando se usa Maven, la creación de proyectos se hace usando un Arquetipo Maven. En Eclipse, la creación de proyectos sea hace mediante el asistente de nuevo proyecto. El plugin m2eclipse mejora este asistente para proporcionar las siguientes funcionalidades adicionales:

  • Crear un proyecto Maven usando un Arquetipo Maven
  • Crear un fichero POM de Maven en un proyecto ya existente

Como se muestra en la Figura 2, "Creando un Nuevo Proyecto con los asistentes de m2eclipse", hay cuatro opciones disponibles, pero este artículo se centra sólo en dos: proyecto Maven ("Maven Project") y fichero POM ("Maven POM file"). Cuando estéis tratando de configurar un entorno de desarrollo en una organización con un código base ya existente, probablemente querréis obtener proyectos Maven desde un sistema de control de versiones como Subversion, pero este proceso lo cubriremos en más detalle más adelante. Si os estás mudando a Maven, querréis ser capaces de añadir nuevos ficheros pom.xml a un proyecto existente, y si estáis empezando a escribir un nuevo sistema, necesitaréis ser capaces de crear un nuevo proyecto. El plugin m2eclipse introduce el concepto de Arquetipo Maven en la plataforma Eclipse, y como m2eclipse tiene acceso a un índice del Repositorio Central de Maven, tenéis acceso a una extensa colección de arquetipos Maven. Echemos un vistazo rápido a dos de estas opciones de creación de proyectos:

Figura 2. Creando un Nuevo Proyecto con los asistentes de m2eclipse

eclipse_create-wizard.gif

Creando un Proyecto Maven a partir de un Arquetipo Maven

Esta es probablemente la nueva funcionalidad más interesante introducida por el plugin m2eclipse. Sin m2eclipse, crear un nuevo proyecto Maven a partir de un arquetipo implica escribir una larga linea de comando en la que se especifica el artifactId y el groupId tanto del arquetipo como del proyecto que estás tratando de crear. Con m2eclipse, usar un arquetipo maven es tan fácil como rellenar un simple diálogo "New Maven Project" y seleccionar un arquetipo de la lista de todos los arquetipos maven en el Repositorio Central de Maven. Si alguien ha publicado un arquetipo maven en el repositorio de Maven, m2eclipse podrá localizar este arquetipo consultando el índice del repositorio. Inmediatamente, m2eclipse proporciona acceso a más de 80 arquetipos maven para proyectos que van desde Mule a AppFuse.

Para crear un proyecto Maven usando un arquetipo maven, elegid "File / New / Project…", y entonces escribid "maven" en el campo de filtrado. Seleccionad "New Maven Project" y pulsad "Next". En la primera pantalla del asistente de nuevo proyecto Maven podéis seleccionar "Create a simple project" lo cuál tendrá el efecto de saltar la elección de arquetipo. Esta primera pantalla también nos permite cambiar el directorio en el que se creará el nuevo proyecto. Por defecto, el nuevo proyecto se creará en vuestro espacio de trabajo (workspace) Eclipse. La segunda pantalla proporciona una interfaz para seleccionar un arquetipo maven para vuestro nuevo proyecto. Hay muchos arquetipos Maven disponibles en la lista que viene con m2eclipse, como se muestra en la Figura 3 "Creando un Nuevo Proyecto con un Arquetipo Maven".

Figura 3. Creando un Nuevo Proyecto con un Arquetipo Maven

eclipse_new-maven.gif

La lista de arquetipos en la Figura 3, "Creando un Nuevo Proyecto con un Arquetipo Maven", es una lista generada por algo llamado el Indexador Nexus. Nexus es un gestor de repositorios Maven construido por Sonatype que está disponible para su descarga en http://nexus.sonatype.org. Nexus mantiene un índice de todos los artefactos y metadatos en el Repositorio Central de Maven, lo que permite a herramientas como Nexus o m2eclipse buscar rápidamente en los contenidos de un repositorio maven. Cuando se escribió este artículo, m2eclipse tenía aproximadamente noventa arquetipos en esta pantalla de diálogo. Además del conjunto estándar de arquetipos maven, en esta lista de arquetipos se pueden destacar los siguientes:

Y estos eran sólo los arquetipos que estaban listados en el Catálogo del Indexador Nexus, si cambias de Catálogos podréis ver otros arquetipos. Un catálogo es simplemente una referencia a un índice de repositorio. Podéis gestionar el conjunto de catálogos que conoce el plugin m2eclipse pulsando en el botón "Configure…" junto al desplegable de los catálogos. Si tenéis vuestros propios arquetipos para añadirlos a esta lista, podéis pulsar en "Add Archetype…"

Una vez que habéis elegido un arquetipo, Maven obtendrá el artefacto apropiado desde el repositorio Maven y presentará el diálogo que se muestra en la Figura 4, "Seleccionando Coordenadas Maven para un Nuevo Proyecto Maven". Esta última pantalla del asistente "Nuevo Proyecto Maven" es donde configuraréis las coordenadas Maven para vuestros proyectos: el artifactId, el groupId y la version. Este diálogo también os proporciona un campo para personalizar el paquete por defecto para cada nuevo proyecto, y la capacidad para especificar propiedades que deberán estar presentes en el nuevo pom.xml del proyecto.

Figura 4. Seleccionando Coordenadas Maven para un Nuevo Proyecto Maven

eclipse_new-maven-project.gif

Una vez que hemos seleccionado un arquetipo y proporcionado un conjunto de coordenadas únicas, pulsad "Finish". m2eclipse creará entonces el nuevo proyecto en vuestro espacio de trabajo Eclipse.

Crear un fichero POM de Maven

Si ya tenéis un proyecto Eclipse que no está usando Maven, podéis empezar a usar Maven en el mismo creando un nuevo fichero POM Maven para él. m2eclipse proporciona un asistente para crear fácilmente un nuevo fichero POM dentro de un proyecto ya existente. Para lanzar este asistente, seleccionad "File / New / Other…", escribid "maven" en el campo de filtrado y seleccionado "Maven POM File". Este asistente de creación de POMs se muestra en la Figura 5, "Creando un nuevo POM":

Figura 5. Creando un nuevo POM

eclipse_create-pom.gif

Crear un nuevo POM es simplemente una cuestión de seleccionar un proyecto, introducir el groupId, artifactId, version, elegir el "packaging type" y proporcionar un "name" en los campos dispuestos. Pulsad el botón "Next" para comenzar a añadir dependencias. m2eclipse os dará entonces la oportunidad de buscar dependencias en una figura que recuerda a la Figura 17, "Buscando una dependencia". Debido a que m2eclipse mantiene un índice del Repositorio Central de Maven, podéis buscar fácilmente dependencias por nombre, artifactId, groupId o incluso localizar artefactos que contienen una clase en particular. Para más información acerca de añadir y buscar dependencias, ver Sección 6.2, "Añadiendo y actualizando dependencias y plugins".3

Importando proyectos Maven

Si estáis tratando de trabajar con un código ya existente, entonces necesitaréis importar un proyecto Maven usando m2eclipse. m2eclipse proporciona 3 opciones para importa un proyecto Maven en Eclipse incluyendo:

Importar Proyectos Maven

Cuando tengáis un proyecto Maven en vuestro equipo y necesitéis importar uno o más módulos desde este proyecto a Eclipse, podéis decirle a m2eclipse dónde buscar el proyecto y él recorrerá el árbol de directorios en busca de ficheros pom.xml.

Obtener Proyectos Maven desde un SCM

m2eclipse obtendrá un proyecto desde el control de versiones y entonces recorrerá el directorio obtenido en busca de ficheros pom.xml.

Materializar proyectos Maven

Dado nada más que el POM de un proyecto, m2eclipse puede usar los metadatos del proyecto para localizar el repositorio de control de versiones. Entonces puede obtener el proyecto desde ese repositorio SCM listado en el POM.

La figura 6, "Importando un proyecto Maven" muestra las opciones disponibles para importar proyectos Maven:

Figura 6. Importando un proyecto Maven

eclipse_import.gif

El diálogo de la Figura 6, "Importando un proyecto Maven" se muestra usando el comando "File / Import" en Eclipse y entonces escribiendo la palabra "maven" en el campo de filtrado. Echemos un vistazo a la operación de importación más sencilla, importar un conjunto de proyectos Maven ya existente desde un directorio.

Importando un proyecto Maven

m2eclipse puede importar un proyecto Maven con un pom.xml ya existente. Apuntad m2eclipse al directorio conteniendo un pom.xml y m2eclipse detectará todos los POMs en el proyecto y proporcionará una lista jerárquica de módulos tal y como se muestra en la Figura 7, "Importando un Proyecto Maven Multi-módulos".

Figura 7. Importando un Proyecto Maven Multi-módulos

eclipse_import-project.gif

La figura 7, "Importando un Proyecto Maven Multi-módulos" muestra la vista de un proyecto a importar. Observad que todos los POMs del proyecto se listan jerárquicamente reflejando las relaciones módulo-submódulo del proyecto multi-módulo. Éste es una importante mejora en la manera en la que tenemos que trabajar con los proyectos Maven antes de m2eclipse. Antes de m2eclipse, Eclipse no tenía conocimiento de la naturaleza jerárquica de un proyecto Maven multi-módulo y, cuando usábamos Eclipse para trabajar con módulos anidados, sólamente nos quedaba aceptar el hecho de que Eclipse no iba a ser capaz de entender estas relaciones.

Una vez importados estos proyectos, Eclipse va a listar cada módulo como un proyecto en nuestro espacio de trabajo. Si importamos los proyectos como se muestra en la Figura 7, "Importando un Proyecto Maven Multi-módulos" debería haber un proyecto para cada artifactId. El proyecto de más alto nivel "servicemix" estaría junto a un proyecto de los otros proyecto multi-módulos como "build", "parent" y "core". Todos estos proyectos estarían junto a los proyectos hijo que contienen el código fuente como "servicemix-jbi" y "servicemix-core". Ya que m2eclipse permite a Eclipse modelar las relaciones entre módulos en un proyecto Maven multi-módulos, Eclipse aún mostrará cada nodo en el árbol en una única lista de proyectos.

Obteniendo un proyecto Maven desde el control de versiones

m2eclipse proporciona la capacidad de obtener un proyecto (o un árbol de proyectos) directamente desde un repositorio de control de versiones. Probablemente necesitemos hacer esto si estamos obteniendo el código fuente de un proyecto que ya existe o si necesitamos importar algunos proyectos Maven de un proyecto de código abierto ("open source"). m2eclipse obtendrá las fuentes del control de versiones y recorrerá un árbol de directorios en busca de ficheros pom.xml. m2eclipse nos permitirá entonces importar un proyeto para cada módulo Maven que encuentre. Para obtener un proyecto Maven desde un sistema de control de versiones (SCM)4, id a "File / New / Other…" y aparecerá el diálogo "New". Escribid "maven" en el campo de filtrado, y seleccionad "checkout Maven Projects from SCM". En el diálogo "Checkout as Maven Project from SCM", introducid la información del SCM para un proyecto y éste lo obtendrá para nosotros en el lugar que le hayamos indicado como se muestra en la Figura 8, "Obtención de un Nuevo Proyecto desde Subversion":

Figura 8. Obtención de un Nuevo Proyecto desde Subversion

eclipse_checking-out.gif

Hay más opciones en este diálogo para especificar una revisión en particular recorriendo las revisiones en un repositorio Subversion o simplemente introduciendo manualmente el número de revisión. Si quisiéramos obtener una revisión en particular de un repositorio Subversion, pulsaríamos en el botón "Select…" junto al campo "Revision". Cuando pulsamos en "Select…", el plugin m2eclipse va a interaccionar con el plugin Subclipse e preguntar al repositorio por la Historia del Recurso ("Resource History").

También podemos controlar qué proyectos va a importar el plugin m2eclipse desde el directorio obtenido (desde Subversion). Por defecto, m2eclipse va a importar todos los proyectos debajo del directorio que descarga desde el control de versiones. Si descargamos un árbol de directorios muy grande que contiene varios módulos Maven anidados, m2eclipse va a recorrer estos directorios y listar cada uno de estos proyectos en un diálogo que presentará a continuación. Si no está seleccionado "Check out All projects" (Obtener todos los proyectos), m2eclipse sólo importará el proyecto Maven de más alto nivel.

Si está marcado "Use default Workspace location" (Usar la situación del espacio de trabajo por defecto), m2eclipse dejará los proyectos en el espacio de trabajo por defecto. Si preferimos guardar el código fuente de nuestro proyecto fuera del espacio de trabajo de Eclipse, desmarcad esta opción y proporcionar una dirección para el proyecto que Eclipse acaba de obtener.

m2eclipse admite un amplio abanico de repositorios de control de versiones. Además de Subversion, el plugin m2eclipse también admite los siguientes proveedores de SCM:

  • Bazaar
  • Clearcase
  • CVS
  • git
  • Mercurial (hg)
  • Perforce
  • Starteam
  • Subversion
  • Synergy
  • Visual SourceSafe

Materializando un Proyecto Maven

m2eclipse también ofrece la posibilidad de "materializar" un proyecto Maven, y ésta es una funcionalidad que se basa en los metadatos almacenados en el POM de un proyecto. La materialización es similar al proceso de obtener ("check out") un proyecto Maven desde Subversion, pero en vez de introducir manualmente el URL del repositorio de Subversion, el URL de Subversion se descubre a partir del fichero POM raiz del proyecto. Podemos usar esta funcionalidad para "materializar" proyectos desde nada más que un fichero POM si el fichero POM tiene los elementos apropiados para especificar la localización de un repositorio de origen. Recorre el repositorio central de Maven en busca de proyectos y los materializa en forma de proyectos Eclipse. Esto resulta útil si nuestro proyecto depende de terceras librerías de código abierto y necesitamos meter mano al código fuente. En vez de localizar el sitio web del proyecto y averiguar cómo obtenerlo de Subversion, simplemente usamos m2eclipse para mágicamente "materializar" el proyecto Eclipse correspondiente.

La figura 9, "Materializando un Proyecto Maven" muestra el asistente después de elegir materializar varios proyectos Maven:

Figura 9. Materializando un Proyecto Maven

eclipse_import2.gif

Observad que la caja de diálogo para los artefactos Maven de la Figura 9, "Materializando un Proyecto Maven" está vacía. Esto es porque aún no se ha añadido ningún proyecto. Para añadir un proyecto debemos pulsar en el botón "Add" a la derecha y seleccionar una dependencia para ser añadida desde el repositorio central de Maven. La figura 10 "Seleccionando el Artefacto a Materializar" muestra cómo añadir un proyecto:

Figura 10. Seleccionando el Artefacto a Materializar

eclipse_add-depend.gif

Al introducir una consulta, los artefactos candidato se localizarán en el repositorio local de Maven. Seleccionad el artefacto que queréis materializar y pulsad "OK" para añadirlo a la lista como se muestra en la Figura 11 "Materializando Apache Camel".

Figura 11. Materializando Apache Camel

eclipse_import-camel.gif

Al añadir una dependencia, tenemos la opción de decirla al plugin m2eclipse que obtenga todos los proyectos para el artefacto. Si está seleccionado "Check out All projects" (Obtener todos los proyectos), Maven materializará el proyecto de más alto nivel y todos los módulos que éste contiene. Si está seleccionado "Use developer connection" (Usar conexión de desarrollador), Maven usará la información del repositorio de control de versiones de desarrollador. Usaríamos la conexión de desarrollador cuando hayamos confirmado ("commit") cambios5 al repositorio de control de versiones del proyecto. Cuando usamos la conexión de desarrollador normalmente necesitamos proporcionar credenciales para el repositorio de código.

Una vez seleccionados los artefactos a materializar, Maven recuperará el proyecto desde el repositorio de control de versiones y creará un nuevo proyecto Eclipse para cada uno de los proyectos importados. La materialización de proyectos sólo funciona si los proyectos que queremos materializar han rellenado la información de SCM en el POM del artefacto.

Trabajando con Proyectos Maven

El plugin m2eclipse proporciona también un conjunto de funcionalidades para trabajar cno proyectos Maven una vez que están en Eclipse. Cuando pulsamos botón derecho en un proyecto y seleccionamos la opción de menú "Maven", podemos ver las funcionalidades Maven disponibles. La figura 12 "Funcionalidades Maven disponibles" muestra un pantallazo de esto:

Figura 12. Funcionalidades Maven disponibles

eclipse_available-features.gif

En la figura 12 "Funcionalidades Maven disponibles", dichas funcionalidades incluyen:

  • Añadir dependencias y plugins
  • Actualizar dependencias, "snapshots" y carpetas de código fuente6
  • Crear un módulo Maven
  • Descargar el código fuente
  • Abrir URLs de proyectos como la página web del proyecto, el sistema de seguimiento de incidencias7, el control de versiones y la herramienta de integración continua.
  • Habilitar / Deshabilitar la resolución en el espacio de trabajo8, módulos Maven anidados y gestión de dependencias.

Estas funcionalidades son también grandes ahorradores de tiempo de modo que vamos a revisarlos brevemente.

Ejecutando Construcciones Maven

m2eclipse modifica los menús "Run As…" y "Debug As…" para permitirnos ejecutar una construcción9 Maven dentro de Eclipse. La figura 13 "Ejecutando una construcción Eclipse con Run As…" muestra el menú "Run As…" para un proyecto m2eclipse. Desde este menú podemos ejecutar algunas de las fases del ciclo de vida más comunes como limpiar ("clean"), instalar ("install") o empaquetar ("package"). También podemos obtener la ventana de diálogo para la configuración de ejecuciones y configurar una construcción Maven con parámetros y más opciones.

Figura 13. Ejecutando una construcción Eclipse con Run As…

eclipse_run-menu.gif

Si necesitamos configurar una construcción Maven con más opciones, podemos elegir "Run Configurations…" y crear una nueva construcción Maven. La figura 14 "Configurando una construcción Maven como una Configuración de Ejecución" muestra el diálogo "Run" para configurar una construcción Maven.

Figura 14. Configurando una construcción Maven como una Configuración de Ejecución

eclipse_run-config.gif

El diálogo de configuración "Run" permite que especifiquemos varios objetivos ("goals") y perfiles ("profiles"), expone opciones como "saltar las pruebas" ("skip tests") y "actualizar snapshots" ("update snapshots") y permite personalizar todo desde el proyecto hasta el JRE e incluso las variables de entorno. Podemos usar este diálogo para admitir cualquier construcción Maven personalizada que queramos lanzar con m2eclipse.

Añadiendo y Actualizando Dependencias y Plugins

m2eclipse ofrece dos opciones para añadir dependencias a un proyecto. La primera opción consiste en editar manualmente el fichero POM para escribir en el XML y añadir la dependencia. El inconveniente de editar manualmente el fichero POM para añadir una dependencia es que ya debes conocer la información acerca del artefacto o usar las funcionalidades discutidas en la sección siguiente para localizar manualmente la información del artefacto en los índices del repositorio. La ventaja es que tras añadir manualmente la dependencia y guardar el POM, el contenedor de las dependencias del proyecto Maven se actualizará automáticamente para incluir la nueva dependencia. La figura 15 "Añadiendo manualmente una Dependencia al POM del Proyecto" muestra cómo añadir una dependencia para "commons-lang" al POM. Una vez que guardamos el POM, el contenedor de Dependencias Maven10 se actualiza automáticamente para incluirla:

Figura 15. Añadiendo manualmente una Dependencia al POM del Proyecto

eclipse_add-manual-depend.gif

Añadir manualmente una dependencia funciona bien pero requiere más trabajo que la segunda propuesta. Al añadir manualmente en el POM el elemento "dependeny" (dependencia), la barra de progreso en la esquina inferior derecha de Eclipse refleja la acción como se muestra en la figura 16 "Actualizando las Dependencias Maven":

Figura 16. Actualizando las Dependencias Maven

eclipse_updating-depends.gif

La segunda opción para añadir una dependencia es mucho más fácil porque no tenemos que conocer ninguna información acerca del artefacto más que el groupId. La figura 17 "Buscando una Dependencia" muestra esta funcionalidad:

Figura 17. Buscando una Depndencia

eclipse_add-depend3.gif

Simplemente introduciendo un groupId en el campo de búsqueda, m2eclipse consulta los índices del repositorio e incluso muestra la versión del artefacto que actualmente esté en nuestro repositorio local de Maven. Esta opción es preferible porque se ahorra muchísimo tiempo. Con m2eclipse no necesitamos ir de caza por el repositorio central de Maven en busca de la versión de un artefacto.

Creando un Módulo Maven

m2eclipse hace muy fácil crear una serie de proyectos anidados en un proyecto Maven multi-módulo. Si tenemos un proyecto padre y queremos añadir un módulo a un proyecto, simplemente pulsad el botón derecho en el proyecto, id al menú "Maven" y elegid "New Maven Module Project" (Nuevo proyecto módulo Maven). m2eclipse nos acompañará a través del proceso de creación del proyecto para crear un nuevo proyecto, entonces actualizará el POM del proyecto padre para incluir la referencia al módulo. Antes de que m2eclipse apareciera era muy difícil usar una jerarquía de proyectos Maven dentro de Eclipse. Con m2eclipse, los detalles de las relaciones subyacentes entre proyectos padres e hijos están integradas en el entorno de desarrollo.

Descargando Código

Si el repositorio central de MAven contiene un artefacto de código fuente para un proyecto en particular podemos descargar las fuentes desde el repositorio y exponerlas en el entorno de Eclipse. Cuando estamos intentando depurar una incidencia compleja, nada puede ser más fácil que poder pulsar el botón derecho en una dependencia de terceros y enchufar el código en el depurador de Eclipse. Seleccionad esta opción y m2eclipse intentará descargar el artefacto de código fuente desde el repositorio Maven. Si fuera incapaz de recuperar este artefacto fuente, deberíamos pedir a los mantenedores del proyecto en cuestión que subieran el paquete Maven de fuentes apropiado al repositorio central de Maven.

Abriendo Páginas del Proyecto

Un POM Maven contiene algunos valiosos URLs que un desarrollador puede necesitar consultar. Estos son la página web del proyecto, el URL para el repositorio de control de versiones, un URL para un sistema de integración continua como Hudson, y un URL para el seguimiento de incidencias. Si estos URLs están presentes en el POM del proyecto, m2eclipse abrirá estas páginas del proyecto en un navegador.

Resolviendo Dependencias

Podemos configurar un proyecto para resolver dependencias desde el espacio de trabajo ("workspace"). Esto tiene el efecto de alterar la manera en que Maven localiza los artefactos dependientes. Si el proyecto está configurado para resolver las dependencias desde el espacio de trabajo, estos artefactos no necesitan estar presentes en nuestro repositorio local. Asumid que el proyecto-a y el proyecto-b están ambos en el mismo espacio de trabajo de Eclipse, y que el proyecto-a depende del proyecto-b. Si la resolución en el espacio de trabajo ("workspace resolution") está deshabilitada, la construcción Maven que hará m2eclipse para el proyecto-a sólo tendrá éxito si el artefacto del proyecto-b está presente en el repositorio local. Si la resolución en el espacio de trabajo está habilitada, m2eclipse resolverá la dependencia a través del espacio de trabajo de Eclipse. En otras palabras, cuando la resolución en el espacio de trabajo está habilitada, los proyectos no tienen que estar instalados en el repositorio local para relacionarse unos con otros.

También podemos deshabilitar la gestión de dependencias ("dependency management"). Esto tiene el efecto de decir a m2eclipse que pare de intentar gestionar el classpath de nuestro proyecto y eliminará el contenedor de Dependencias Maven11 de nuestro proyecto. Si hacemos esto, estaremos desasistidos cuando se trate de manejar el classpath de nuestro proyecto.

Trabajando con Repositorios Maven

m2eclipse también proporciona algunas herramientas para hacer el trabajo con los repositorios Maven algo más fácil. Estas herramientas proporcionan funcionalidades para:

  • Buscar Artefactos
  • Buscar clases Java
  • Indexar repositorios Maven

Buscando Artefactos Maven y clases Java

m2eclipse añade un par de elementos en el menú de Navegación de Eclipse que hacen la búsqueda de Artefactos Maven y clases Java un trabajo fácil. Cada opción está disponible pulsando en el menú de Navegación como se muestra en la Figura 18 "Buscando Artefactos y Clases":

Figura 18. Buscando Artefactos y Clases

eclipse_navigate.gif

Observad las opciones disponibles en la Figura 18 "Buscando Artefactos y Clases" bajo el menú de Navegación Eclipse denominadas "Open Maven POM" (Abrir POM Maven) y "Open Type from Maven" (Abrir Clase12desde Maven). La opción de Abrir un POM Maven nos permite buscar un POM dado en el repositorio Maven tal y como se muestra en la Figura 19 "Buscando un POM":

Figura 19. Buscando un POM

eclipse_search-pom.gif

Al seleccionar un artefacto y pulsar OK, el POM de este artefacto se abre en Eclipse para recorrerlo o editarlo. Esto es útil cuando necesitamos echar un vistazo rápido al POM de un artefacto dado.

La segunda opción m2eclipse en el menú de Navegación se llama Abrir Clase desde Maven. Esta opción nos permite buscar una clase Java por el nombre en un repositorio remoto. Al abrir este diálogo, simplemente escribid "factorybean" y veréis muchas clases con el nombre FactoryBean en ellas tal y como se muestra en la Figura 20 "Buscando una Clase en el Repositorio":

Figura 20. Buscando una Clase en el Repositorio

eclipse_search-class.gif

Esto es un gran ahorro de tiempo porque significa que la búsqueda manual de una clase en particular a través de artefactos en un repositorio Maven es una cosa del pasado. Si necesitamos usar una clase específica, simplemente lanzad Eclipse, id al menú de Navegación y buscad por la clase. m2eclipse nos mostrará la lista de artefactos en los que ésta aparece.

Indexando Repositorios Maven

La vista de Índices Maven nos permite navegar manualmente hacia POMs en un repositorio remoto y abrirlos en Eclipse. Para obtener esta Vista, id a "View / Show View / Other", escribid la palabra "maven" en la caja de búsqueda y deberíais ver una vista llamada "Maven Indexes" (Índices Maven) tal y como se muestra en la Figura 21 "Mostrar la Vista de Índices Maven":

Figura 21. Mostrar la Vista de Índices Maven

eclipse_show-view.gif

Seleccionad esta Vista y pulsad OK. Esto mostrará la "Maven Indexes View" (Vista de Índices Maven) como se muestra en la Figura 22 "Vista de Índices Maven":

Figura 22. Vista de Índices Maven

eclipse_indexes.gif

Además, la Figura 23 "Localizando un POM en la Vista de Índices" muestra la Vista de Índices MAven después de navegar manualmente para localizar un POM:

Figura 23. Locazando un POM en la Vista de Índices

eclipse_index2.gif

Después de buscar el artefacto "apache-camel", haciendo "doble click" sobre él abrirá el mismo en Eclipse para recorrerlo o editarlo.

Estas funcionalidades hacen que trabajar con repositorios remotos desde dentro de Eclipse sea mucho más fácil y rápido. Después de todas las horas que posiblemente hemos gastado haciendo este tipo de tareas a mano durante los últimos años - visitando repositorios a través del navegador web, descargando artefactos y haciendo "grep" buscando clases y POMs - encontraréis que m2eclipse es un grato cambio a mejor porque potencia el índice de repositorio Nexus.

Preferencias Maven

La capacidad de ajustar las preferencias de MAven y algunas opciones de Maven es un aspecto importante de desarrollar con Maven y m2eclipse ofrece la posibilidad de cambiar estos elementos a través de la página de preferencias Maven dentro de Eclipse. Normalmente cuando usamos Maven desde la linea de comandos, esas preferencias y opciones están disponibles desde ficheros en nuestro directorio ~/.m2 y como opciones de la linea de comandos. m2eclipse proporciona acceso a algunas de las preferencias y opciones más importantes desde el IDE. La Figura 24 "Preferencias Maven para Eclipse" muestra la página de preferencias Maven en Eclipse:

Figura 24. Preferencias Maven para Eclipse

eclipse_preferences.gif

Las casillas ("check boxes") en la sección superior proporcionan la posibilidad de:

  • Ejecutar Maven en modo "fuera de linea" ("offline"), deshabilitando cualquier descarga desde repositorios remotos
  • Habilitar la salida de depuración en la Consola Maven
  • Descargar "jars" de fuentes de un artefacto desde repositorios Maven remotos
  • Descargar "jars" de JavaDoc de un artefacto desde repositorios Maven remotos
  • Descargar y Actualizar índices locales desde repositorios remotos al arrancar

La siguiente sección ofrece un menú "pop-up" para seleccionar qué objetivo ("goal") nos gustaría que fuera ejecutado cuando un proyecto sea importado y cuando las carpetas de fuentes para un proyecto dado se actualicen. El objetivo por defecto se llama "process-resources" que copia y procesa los recursos del proyecto en el directorio de destino para dejar el proyecto listo para empaquetar. Personalizar esta lista de objetivos puede ser útil si necesitamos ejecutar objetivos personalizados que procesen recursos o generen configuración de mantenimiento13.

Si necesitamos ayuda seleccionando un objetivo, pulsamos en el botón "Select…" para ver el diálogo "Goals" (Objetivos). La Figura 25 "Diálogo de Objetivos Maven con Ciclo de vida Maven" muestra el diálogo de Objetivos con una lista de todas las fases en el ciclo de vida Maven por defecto.

Figura 25. Diálogo de Objetivos Maven con Ciclo de vida Maven

eclipse_preference-goals.gif

Cuando vemos el diálogo de Objetivos por primera vez, es posible que nos sintamos abrumados por el número de objetivos mostrados. Hay literalmente cientos de plugins Maven para todo desde generar una base de datos, hasta ejecutar pruebas de integración, o realizar análisis estáticos (de código), o incluso generar web services con XFire. Hay más de doscientos plugins con objetivos seleccionables en el diálogo de Objetivos, la Figura 26 "Selección de Objetivo con el Plugin Tomcat Resaltado" muestra el diálogo "Goals" con los objetivos del plugin Maven para Tomcat resaltados.

Figura 26. Selección de Objetivo con el Plugin Tomcat Resaltado

eclipse_preference-goals2.gif

Otra página de preferencias Maven es la página de configuración de Instalaciones Maven que se muestra en la Figura 27 "Página de Preferencias de Instalaciones Maven":

Figura 27. Página de Preferencias de Instalaciones Maven

eclipse_preferences2.gif

Esta página nos permite añadir otras instalaciones Maven al entorno Eclipse. Si queremos usar una versión diferente de Maven con el plugin m2eclipse podemos configurar múltiples instalaciones de Maven desde esta página de configuración, esto es muy parecido a la opción de añadir más de una JVM (Máquina Virtual Java) para correr dentro de Eclipse. Una versión "incrustada" (embedded) de Maven conocida como el Maven Embedder ya está especificada. Ésta es la que se usa para ejecutar Maven dentro de Eclipse. Si tenemos otra instalación de Maven que quisiéramos usar en vez del Maven Embedder, podemos añadir otro "runtime" Maven pulsando en el botón "Add…". La Figura 27 "Página de Preferencias de Instalaciones Maven" muestra una página de configuración que lista el Maven Embedder, Maven 2.0.9 y una instalación de Maven 2.1-SNAPSHOT.

La página de configuración de Instalaciones también nos permite especificar la posición del fichero de propiedades global de Maven. Si no queremos especificar la situación de este fichero en esta página de configuración, Maven usará el fichero por defecto buscando en conf/settings.xml de la instalación de Maven seleccionada. También podemos cambiar la situación de nuestro fichero de propiedades de usuario desde el valor por defecto ~/.m2/settings.xml y podemos cambiar la posición del repositorio local de Maven desde la localización por defecto en ~/.m2/repository.

Resumen

Cuando instalamos m2eclipse, entenderemos que añade ayudas para proyectos Maven. Seremos capaces de ejecutar construcciones Maven perfectamente e importar y crear proyectos Maven. m2eclipse estará al tanto de las relaciones entre proyectos y nos encontraremos a nosotros mismos recurriendo a la linea de comandos cada vez menos para ejecutar una construcción Maven. Después de unas cuantas semanas comenzaremos a darnos cuenta de que m2eclipse ha cambiado la manera en que desarrollamos en Eclipse.

Gracias a la integración con el índice de repositorio Nexus, m2eclipse expone cierta información de gran valor para el desarrollador y trae la riqueza semántica del repositorio central a la punta de nuestros dedos. Ejecutando las fases del ciclo de vida Maven desde Eclipse es interesante, pero ser capaz de ver una lista completa de Arquetipos Maven en el repositorio central y ser capaz de buscar todos los artefactos que contienen una clase específica son las características que harán de m2eclipse un agregado imprescindible a tu "kit" de desarrollo.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License