Simple Google Web Toolkit plugin for Maven2

GWT es un toolkit que te permite programar interfaces web mediante Java, que luego son compiladas para producir html, javascript y css. Como toda aplicación Java, hay que tener preparado algún método para empaquetar y distribuir dicha aplicación. La mejor alternativa actualmente es Maven, como expliqué en un post anterior. Maven se integra perfectamente cuando desarrollas una aplicación web en Java, permitiéndote crear archivos war listos para ser instalados en cualquier contenedor de servlets fácilmente.
 
Actualmente existen plugins para maven para poder usar con él GWT, pero como uno de ellos es demasiado complejo (o eso dicen, no lo he usado), otro es demasiado simple, y tenía ganas, me hice mi propio plugin, para que haga lo que en mi opinión debería de hacer un puñetero plugin de GWT para maven.
 
Primero, características del mismo, qué narices hace, y para qué sirve

  • Compila usando una instalación de GWT local
  • Independiente de la versión de GWT (esto es importante, el plugin “simple”, no lo era)
  • Elimina clases java de la parte cliente innecesarias, puesto que éstas son compiladas por GWT, por lo tanto no deben de ser añadidas al war final puesto que nunca van a ser usadas. ¿Cómo se hace esto? Se borran todos los ficheros de la parte cliente excepto aquellos directorios llamados common.
  • Mueve los ficheros compilados por GWT a la carpeta raíz de la aplicación web (¿por qué hacer esto?, bicosyes, y porque así no tenemos urls tipo /com.mycompany.myApp/myApp.html, sino /myApp.html como debe ser)

Vale, y ¿qué se puede configurar?

  • Directorio de GWT, por defecto /opt/gwt
  • Sistema operativo, por defecto linux
  • Borrar clases java de gwt, si o no
  • Mover ficheros compilados de gwt, si o no

¿Cómo puedo usarlo en mi pom.xml?

<plugin>
		<!-- GWT compiling -->
		<groupId>com.bicosyes</groupId>
		<artifactId>simple-gwt</artifactId>
		<version>0.1</version>
		<configuration>
				<gwtHome>/opt/gwt</gwtHome>
				<os>linux</os>
				<modules>
						<module>com.bicosyes.HolaMundoWeb</module>
				</modules>
				<move>true</move>
				<delete>true</delete>
		</configuration>			
		<executions>
				<execution>
						<id>Compile gwt</id>
						<phase>compile</phase>
						<goals><goal>gwt</goal></goals>
				</execution>
				<execution>
						<id>Cleaning gwt stuff</id>
						<phase>process-classes</phase>
						<goals><goal>gwtClean</goal></goals>
				</execution>				
		</executions>
</plugin>

En este caso, las opciones gwtHome y os se podrían omitir, puesto que se tomarían esos valores por defecto. Respecto a la acción de borrar clases, como he comentado brevemente antes, se borrarán todos los archivos de la carpeta client/ del modulo gwt, excepto las carpetas con el nombre common, ¿por qué hacerlo de esta forma?, pues porque la parte server de la aplicación necesitará incluir en su código clases de la parte cliente, una solución sería duplicar estas clases (o en un SO decente usar enlaces simbólicos, ln -s) y otra sería crear un paquete common dentro de client, al cual se hará referencia desde las clases del servidor. ¿Por qué usar common como nombre?, ¿por qué no?, principalmente porque se me ocurrió así de primeras y encima luego se lo vi usar a uno de IBM en un artículo, así que no debe de ser una solución tan mala.
 
Vale, ahora ya solo queda saber cómo instalarnos el plugin, pues dos formas tenemos, ambas muy sencillas

  • Opción 1
    $ svn checkout http://svn.bicosyes.com/SimpleGWTmvn/simple-gwt
    $ cd simple-gwt/
    $ mvn install
  • Opción 2
    $ wget http://bicosyes.com/code/simple-gwt-0.1.jar
    $ mvn install:install-file \
             -Dfile=simple-gwt-0.1.jar \
             -DgroupId=com.bicosyes \ 
             -DartifactId=simple-gwt \
             -Dversion=0.1 \
             -Dpackaging=maven-plugin \
             -DgeneratePom=true \
             -DcreateChecksum=true

Por supuesto, animo a cualquiera que quiera, coger y modificar el código para añadir funcionalidad, es realmente simple hacer plugins para maven, y el código es bastante corto y comprensible. Cuando tenga tiempo (es decir, cuando me salga de las narices) tengo pensado añadir alguna funcionalidad más, he aquí la lista:

  • Crear (o completar si existe ya) el web.xml con las definiciones de los servlets y mapeos de los mismos a partir del fichero definición de los modulos de gwt
  • Permitir configurar los directorios donde puede haber clases que necesite el servidor (para lo de borrar y tal)

Comments are closed.

Post Navigation