Maven para desplegar en un Tomcat desde el Eclipse

Este post es obsoleto, para desplegar en un tomcat7 o superior ver la entrada siguiente:Desplegar en tomcat 7 con plugin de maven:

En esta entrega vamos a ver en 5 pasos cómo desplegar un war realizado con maven en un tomcat local o remoto desde el eclipse.
Vamos a asumir que tenemos un eclipse con los plugins de Maven y que tenemos un tomcat en nuestro ordenador. En nuestro caso vamos a desplegar un war que de un proyecto Maven, llamado starter que genera un artefacto "andy.war".
La versión de eclipse utilizada es Helios y los tomcat son un 5.5 en local y un tomcat 6 sobre una máquina virtual(remoto). Por lo demás creo que no hay nada más especial, la versión del jdk es la 1.6 y como plugins en el eclipse además de los de maven el de subversion apuntando a un repositorio de una máquina virtual.

Primer paso: Crear una cuenta de manager en tomcat:

Para ello vamos hasta el directorio del tomcat, carpeta conf y allí editamos el archivo "tomcat-users.xml"

<tomcat-users>
<role rolename="manager"/>
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="tomcat" roles="manager"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
</tomcat-users>

En un alarde de ingenio y originalidad creamos una cuenta "tomcat" con contraseña "tomcat" con el rol de "manager". Siéntete libre de crear la cuenta de manager con usuario "dsx58969" y contraseña "g8r45ft"... pero luego acuerdate de ellos.

Segundo paso: Indicarle a Maven nuestro tomcat.

Para lo cual debemos editar el archivo setting.xml de la carpeta .m2. Dicha carpeta se debería encontrar en el directorio del usuario.
Allí está casi todo comentado, pero nos encontreremos un apartado "servers" en el cual vamos a definir nuestro servidor. Podemos definir varios.

<server>
<id>beaduerme</id>
<username>tomcat</username>
<password>tomcat</password>
</server>

Yo le he puesto el identificador "beaduerme" pero puedes ponerle otro cualquiera. El lector sagaz tardará poco en verle la lógica a los otros dos parámetros: username y password. Quizá en tu caso sea "dsx58969".....:-P
Destacar el hecho de que los parámetros de conexión residen en un archivo que no se suele intercambiar, el de preferencias de maven. Si estuviesen en el pom cada miembre del equipo tendría que cambiarlo a los de su tomcat local.

Tercer paso. Editar el POM.

Es preciso añadir al pom.xml el plugin apropiado en al apartado del build.

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>tomcat-maven-plugin</artifactId>
  <configuration>
   <server>beaduerme</server>
   <path>/andy</path>
  </configuration>
</plugin>

El groupId y el artefacto son los que corresponden para poder ejecutar la tarea maven apropiada. A nosotros nos corresponde la configuración. En server ponemos el identificador que hemos definido en la configuración de maven y en el path la ruta donde debe desplegarse el war. En mi caso voy a desplegar una aplicación andy.war

El apartado build del pom, quedaría como esto:

<build>
<finalName>andy</finalName>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<configuration>
<server>beaduerme</server>
<url>http://localhost:7777/manager</url>
<path>/andy</path>
</configuration>
</plugin>
</plugins>
</build>

En el subapartado de configuración del plugin hemos puesto la url del tomcat. Si estuviesemos utilizando el puerto por defecto del tomcat, el 8080, sería innecesaria dicha linea.Ya que el plugin toma por defecto "<url>http://localhost:8080/manager</url>". Si el path que queremos para desplegar es el implicito del war también podríamos prescindir de la linea path.

El puerto por defecto de escucha se configura desde el archivo server.xml que se encuentra en la carpeta conf del tomcat.

<Connector port="7777" maxHttpHeaderSize="8192"
maxThreads="50" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443"
connectionTimeout="20000" disableUploadTimeout="true" />


Cuarto paso: Lanzar el tomcat.

Por ejemplo ir hasta la carpeta bin del tomcat y hacer doble click sobre startup.bat.
Puede ser el momento apropiado para comprobar que podemos acceder desde localhost al manager con el nombre de usuario y contraseña que hemos indicado en el paso 1.
Destacar que el tomcat puede estar en una máquina remota y/o estar escuchando en otro puerto, lo único que cambiará en el pom la url.

Se ha probado este minitutorial desplegando en un tomcat 5.5 local y en un tomcat6 remoto. Merece la pena destacar que en el tomcat 6 se indica que a la hora de definir usurios y roles indica que hay que definir un "manager-gui", en versiones anteriores era "manager", para entrar en la consola de gestión.... Para que el plugin funcione correctamente en el tomcat 6 hay que definir el rol como "manager".
Así el tomcat-user.xml del tomcat 6 es tal que así:

<tomcat-users>
<!-- TOMCAT 6
NOTE: By default, no user is included in the "manager-gui" role required to operate the "/manager/html" web application. If you
wish to use this app, you must define such a user - the username
and password are arbitrary.
-->
<role rolename="manager"/>
<user username="tomcat" password="tomcat" roles="manager"/>
</tomcat-users>


Quinto paso. Desplegar desde el eclipse

Para ello iremos a Run As.. Run Configurations ...


Ojo. Para que esto funcione el tomcat tiene que estar lanzado. "Deploy" no lanza el tomcat

Y escribiremos en una configuración de maven el "Goal" tomcat:deploy

Si la ejecutamos la salida en la consola del eclipse debería ser algo como esto...

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Struts 2 Starter 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> tomcat-maven-plugin:1.1:deploy (default-cli) @ andy >>>
.......

-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running es.home.andy.prueba.HelloWorldActionTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.031 sec
Running es.home.andy.prueba.IndexActionTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec

Results :

Tests run: 2, Failures: 0, Errors: 0, Skipped: 0

[INFO]
[INFO] --- maven-war-plugin:2.1.1:war (default-war) @ andy ---
....
[INFO] <<< tomcat-maven-plugin:1.1:deploy (default-cli) @ andy <<<
[INFO]
[INFO] --- tomcat-maven-plugin:1.1:deploy (default-cli) @ andy ---
[INFO] Deploying war to http://localhost:7777/andy
[INFO] OK - Desplegada aplicación en trayectoria de contexto /andy
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 6.594s
[INFO] Finished at: Sun Nov 06 11:47:08 CET 2011
[INFO] Final Memory: 5M/35M
[INFO] ------------------------------------------------------------------------

Nos compila, pasa los test y nos despliega en el tomcat.

Para replegarla podemos crear otra configuración identica a la anterior con el Goal "tomcat:undeploy". Al ejecutarla obtenemos en la consola del eclipse el resultado esperado

....
[INFO] ------------------------------------------------------------------------
[INFO] Building Struts 2 Starter 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- tomcat-maven-plugin:1.1:undeploy (default-cli) @ andy ---
[INFO] Undeploying application at http://localhost:7777/andy
[INFO] OK - Replegada aplicacación en trayectoria de contexto /andy
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.906s
[INFO] Finished at: Sun Nov 06 12:22:09 CET 2011
[INFO] Final Memory: 3M/15M
[INFO] -----------------------------------------------------------------------


Apendice

Se ha probado a desplegarlo en un tomcat remoto, en 192.168.2.54 simplemente cambiando en el pom. En ese tomcat tengo el mismo usuario y pass para el rol de manager.
Si tuviera distintos user/pass podría definir en el setting.xml de maven otro server y referenciarlo en el pom apropiadamente
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<configuration>
<server>beaduerme</server>
<url>http://192.168.2.54:7000/manager</url>
<path>/andy</path>
</configuration>
</plugin>

Comentarios

  1. Muchas gracias por tus articulos, me han servido de gran ayuda. Claros y sencillos.

    ResponderEliminar
    Respuestas
    1. Intento que sean super concretas las explicaciones, quizá no sean muy buenas para alguien que empieza, pero confio que le sirvan a alguien con algo de rodaje en java.
      Gracias por el "feedback"

      Eliminar

Publicar un comentario

Sin Java agradece sus comentarios