Maven Multi-Project + Jetty + Eclipse + JRebel
Lunes,30 noviembre, 2009 at 22:56 Deja un comentario
A continuación explicamos como configurar un proyecto Maven multi-project para que utilice JRebel + Jetty + Eclipse:
1º Creamos nuestro projecto Maven multi-project
Deberíamos tener algo parecido a esto en el pom padre.
<modules>
<module>project-domain</module>
<module>project-service</module>
<module>project-webapp</module>
</modules>
Ver Cómo crear un proyecto multimódulos en maven [1].
2º Configuramos el módulo de webapp para que se pueda lanzar con jetty
En el módulo del webapp añadimos el siguiente plugin de maven:
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.21</version>
<configuration>
<!-- Establece el contexto con el que se
va a desplegar la aplicación -->
<contextPath>/project</contextPath>
<!-- Es necesario para que funcione JRebel,
evita que Jetty detecte los cambios realizados -->
<reload>manual</reload>
</configuration>
</plugin>
He utilizado la versión 6 de Jetty, aunque en la última versión JRebel ya soporta la versión 7 [2].
3º Configuramos el plugin de JRebel para maven
<plugin>
<groupId>org.zeroturnaround</groupId>
<artifactId>javarebel-maven-plugin</artifactId>
<executions>
<execution>
<id>generate-rebel-xml</id>
<phase>process-resources</phase>
<goals>
<goal>generate</goal>
</goals><
</execution>
</executions>
<configuration>
<packaging>war</packaging>
<classpath>
<fallback>default</fallback>
<resources>
<resource>
<!-- Indicamos a JRebel donde se encuentra
el código del dominio -->
<directory>
${basedir}/../project-domain/target/classes
</directory>
</resource>
<resource>
<!-- Indicamos a JRebel donde se encuentra
el código de los servicios -->
<directory>
${basedir}/../project-service/target/classes
</directory>
</resource>
</resources>
</classpath>
</configuration>
</plugin>
Este plugin se ejecutará en la fase anterior que el plugin de jetty, y su función es generar el fichero ‘rebel.xml’. Para poder utilizar este plugin hemos de haber añadido a nuestro proyecto o en el settings.xml el repositorio de plugins :
<pluginRepositories>
<pluginRepository>
<id>zt-repo</id>
<name>Zero turnaround repo</name>
<url>dav:http://repos.zeroturnaround.com/maven2</url>
</pluginRepository>
</pluginRepositories>
4º Configuramos Eclipse para realizar el debug con JRebel
Configuramos el plugin de Maven para eclipse en el webapp. Esto no es obligatorio pero es conveniente para evitar problemas futuros y mejor funcionamiento del plugin.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<projectNameTemplate>[artifactId]</projectNameTemplate>
<wtpapplicationxml>true</wtpapplicationxml>
<wtpmanifest>false</wtpmanifest>
<wtpversion>2.0</wtpversion>
</configuration>
</plugin>
Seguimos la guía que tiene JRebel para configurar Eclipse [3].
4º Configuramos Eclipse para lanzar la aplicación
En el menú de ‘External Tools Configurations’ creamos una nueva configuración con los siguientes valores:
- Name: Nombre que ha de tener la tarea (No puede existir dos tareas o configuración con el mismo nombre).
- Location: M2_HOME\bin\mvnDebug.bat
- Working Directory: ${workspace_loc:/project-webapp} (Seleccionamos el módulo del webapp previamente importado el proyecto)
- Arguments: jetty:run -noverify -javaagent:JREBEL_HOME\jrebel.jar
Nota: En mi caso las opciones ‘-noverify -javaagent:JREBEL_HOME\jrebel.jar’ las he configurado en una copia del mvnDebug.bat y lo he sustituido en la propiedad Location.
6º Lanzamos la aplicación en modo debug
Lanzamos en eclipse la configuración establecida y posteriormente creamos una ‘Debug Configuration’:
- Name: Nombre (No ha de coincidir con la configuración anterior)
- Project: project-webapp
- Connection Type: Standard(Socket Attach)
- Host: localhost
- Port: 8000 (Por defecto en mvnDebug.bat)
- Allow termination of remote VM: marcado (Hay un bug en windows y no finaliza el proceso, hay que matarlo manualmente)
Entonces lanzamos la configuración establecida y ya tenemos nuestra aplicación corriendo con el path indicado y en el puerto 8080(por defecto). Con ello podremos modificar el código de cualquier módulo sin necesidad de realizar un mvn install, process-resources o parar/reniciar el contenedor.
[1] http://renidev.javabolivia.com/2009/11/01/application-multi-modulo-hola-mundo-con-maven/
[2] http://www.zeroturnaround.com/blog/javarebel-2-1-1-released/
[3] http://www.zeroturnaround.com/jrebel/eclipse-jrebel-tutorial/
Entrada archivada en:Java, Maven. Etiquetas:Eclipse, Java, Jetty, JRebel, Maven.
Trackback este articulo | Suscríbete a los comentarios vía RSS Feed