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’:

Configuramos una ‘Remote Java Application’ con los siguientes valores:
  • 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/

Advertisement

Entrada archivada en:Java, Maven. Etiquetas:, , , , .

Comenzando en el Software Libre

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Trackback este articulo  |  Suscríbete a los comentarios vía RSS Feed


Feeds

Entradas Recientes

Categorias


Seguir

Get every new post delivered to your Inbox.