Maven en Eclipse: m2e

Una de las cosas que menos me gusta a la hora de empezar un proyecto nuevo es tener que comenzar desde cero a montar todas la infraestructura para poder comenzar. A pesar de que Eclipse tiene diversas plantillas, éstas son muy genéricas y hay que complementarlas con librerías y servidores, lo que nos puede llevar un buen rato hasta que comenzamos a poder empezar a ser productivos. Por ejemplo si queremos un proyecto que lleve struts2 con acceso JPA a base de datos, tenemos que ir a proyecto java web y complementar las librerías.

El punto ideal de comienzo de un proyecto sería disponer de un “Hola Mundo” básico sobre el cual empezar a programar, saltándonos la configuración previa. Afortunadamente en el mundo Java existe una herramienta llamada Maven que facilita el ciclo de vida de una aplicación, desde su creación (aspecto del que va este post) hasta el testing o el deploy. En este post solamente vamos a ver cómo aprovechar una pequeña parte de su potencial para facilitarlos el inicio de un proyecto.

Maven es una herramienta de Apache que puede ser descargada en http://maven.apache.org/ y que se puede encontrar una introducción a su uso en http://maven.apache.org/users/index.html (recomiendo el apartado http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html para un rápido vistazo práctico a su potencial). Su funcionamiento para la creación está basado en los “Archetypes” que son una especie de plantillas que utilizaremos para crear nuestro proyectos y que contiene una descripción de las librerías y otras dependencias, así como unos ficheros básicos que contiene el “hola mundo” que necesitamos para comenzar.

Mediante Maven podemos “instanciar” un archetype de nuestro gusto de los múltiples que hay por Internet, como por ejemplo de http://search.maven.org/ o de http://mvnrepository.com/ . Hay cientos de ellos asi que es complicado no encontrar uno que se adapte a nuestras necesidades. Maven descarga el archetype y crea en el directorio que le indiquemos una implementación del proyecto. Además se descarga las bibliotecas .jar en un lugar común en nuestro ordenador y establece las dependencias para que simplemente ejecutemos.

Como se trata de una herramienta básica que muchos otros programas utilizan y además es susceptible de automatizar (sobre todo por las otras etapas del ciclo de vida en las que es de gran ayuda), no tiene una interfaz gráfica. Esto tiene sus ventajas e inconvenientes. En este post vamos a ver cómo la podemos integrar dentro de Maven para que los usuarios que están más acostumbrados a usar eclipse, puedan usar las ventajas de esta herramienta. Para ello existe el plugin m2e para Eclipse, así como su integración en WTP (Web Tools Platform) de Eclipse. Este plugin ya incorpora una edición embebida de Maven para que no tengamos que hacer nada

Pasos para ponerlo en práctica:

1. Instalar los plugins de eclipse m2e y m2e-wtp, que integra maven con el WTP (Web Tools Platform) de eclipse:

  • Ir a Help->Install new Software e introducir la siguiente URL: http://download.eclipse.org/m2e-wtp/releases/juno/ (o la distribución de Eclipse que estemos usando – Kepler, Galileo…-)
  • Elegir el plugin m2e y el m2e-wtp normal (no el SDK, aunque podemos instalarlo si queremos)
  • Reiniciar Eclipse para finalizar la instalación

(En la página oficial de los plugins hay un excelente video de poco más de un minuto http://www.eclipse.org/m2e-wtp/)

2. Para crear un repositorio:

  • Crear un proyecto nuevo (File->New->Other o Ctrl+N)
  • En la caja de elección del wizard, escribir Maven para localizar los proyectos de Maven
  • Elegir “Maven Project”
  • Usar el default workspace de Eclipse (para que cree el proyecto en nuestro workspace, que suele ser lo más habitual).
  • En la ventana de elección del archetype, pinchar en Configure, puesto que no están los que buscamos (necesitamos localizar un Archetype de Struts2).
  • En la ventana de configuración de Archetypes, pulsar sobre “Add Remote Catalog” y añadir un nuevo repositorio con esta URL: http://repo1.maven.org/maven2/archetype-catalog.xml
  • Elegir como fuente el nuevo catálogo (yo lo he llamado “Maven General” pero puedes llamarlo como quieras)
  • Pinchar sobre struts2-archetype-blank (que es un archetype de un proyecto struts2 en blanco. Puedes elegir el que quieras).
  • En la siguiente ventana, completar los datos del proyecto que amos a crear: Group ID para el grupo al que pertenece el proyecto; Artifact ID para designar el proyecto y Package para nombrar el paquete base que usaremos.
  • Pulsamos en finalizar para acabar con el wizard de creación.

Ahora esperamos unos instantes para que Maven descargue todas las librerías y dependencias que están declaradas en el archetype, y para que cree los ficheros básicos (algunas acciones de Struts2, JSP, los xml de configuración de la aplicación Web…)

Al final tendremos un proyecto basado en el Archetype elegido. Podremos ver que:

  • El proyecto se ha creado en nuestro workspace y que ya tiene una estructura completa creada, con las dependencias de struts2 necesarias, además de una aplicación de ejemplo con acciones básicas y un struts.xml
  • Las dependencias (los .jar) ahora se encuentran en nuestro ordenador en nuestro directorio personal de nuestro sistema operativo /.m2/repository
  • Podemos tratar el proyecto como si de un proyecto web de Eclipse se tratara. Esto es posible gracias al plugin m2e-wtp.

Desafortunadamente puede surgir una serie de problemas derivados del uso del plugin m2e para Eclipse, que podremos resolver con ayuda de StackOverflow en su mayor parte. Aquí van alguno de los problemas que he experimentado, aunque todos ellos se han podido resolver con no mucho trabajo:

  • El problema persistente del fichero Missing artifact com.sun:tools:jar:1.5.0:system pom.xml que es un fichero que lleva el JRE pero que no es capaz de encontrar. Esta biblioteca (tools.jar) forma parte de la instalación del JDK pero no del JRE. Si tenemos el JRE instalado y eclipse está corriendo con la máquina virtual del JRE y no del JDK puede sucedernos este error, puesto que no es capac de encontrar la biblioteca tools.jar. Se soluciona de esta forma:
    •  editando el fichero eclipse.ini e incluyendo justo antes de de -vmargs la sentencia: vm “C:\Program Files\Java\jdk1.6.0_37\bin\javaw.exe”. (o donde se tenga el JDK instalado.
    •  usando el JDK como entorno de ejecución del proyecto (y no el JRE).
    •  por último haciendo un clean del proyecto seguido de un build para que coja los cambios.
  •  Descarga incorrecta de bibliotecas. Es algo que en Maven en modo comando es fácil de detectar puesto que avisa de que el hash del fichero no coincide con el proporcionado, pero en Eclipse debemos esperar a un build del proyecto. De este modo recibiremos errores de clases no encontradas o similar. La razón es que el fichero .jar está corrupto y no puede extraerse la información. La solución:
    • Ir al repositorio de bibliotecas que hay en nuestro perfil de usuario (en mi caso: C:\Users\mysticalpotato\.m2\repository) y localizar el .jar. Se renombrar o elimina y se actualiza el proyecto con Maven (botón auxiliar sobre el proyecto, Maven->Update Project) para que se vuelva a bajar todas las bibliotecas que no están. Si hay suerte se bajarán las correctas, sino habrá que insistir
Anuncios

2 comments

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s