Apache Maven Simplifica el Proceso de Construcción -- Incluso más que Ant

Normalmente los ficheros .class se cargan desde el classpath. Y los otros tipos de ficheros (recursos) tambi�n se cargan desde el classpath, utilizando los distintos m�todos getResource. Si quieres evitarte tener que borrar esos recursos cada vez que invocas el goal clean, necesitas almacenar los recursos fuera del directorio de clases y copiarlos al directorio de clases como parte del proceso de construcci�n. Maven tiene un goal para este prop�sito llamado jar-resources. Que no comprime nada, s�lo copia los recursos al directorio target/classes. Maven llama autom�ticamente a este goal cuando ejecutas el goal jar.

Primero, necesitamos decirle a Maven, d�nde estar los ficheros de recursos:

  1. A�ade el elemento resources al fichero project.xml como se muestra abajo:
    ...
        </unitTest>
        <resources>
            <resource>
                <directory>
                    ${basedir}/src/conf
                </directory>            
            </resource>
        </resources>
    </build>
    ...
    
  2. Sit�a un fichero de recurso, digamos box.properties, en <project_home>/src/conf.
  3. Ejecuta el goal jar, que indirectamente ejecuta el goal jar-resources:
    maven jar
    

Mira en la carpeta target/classes. Deber�as ver que Maven ha copiado box.properties desde src/conf a target/classes.

.�Crear Goals y Plug-ins

Al igual que Ant, Maven nos permite crear nuestros propios goals. Podemos utilizar los goals de Maven en distintos niveles:

  1. Usar un goal existente tal y como �s.
  2. Extender un goal existente.
  3. Crear nuestro propio goal a nivel de proyecto.
  4. Crear un goal multi-proyecto creando un plug-in Maven.

.�Goals Espec�ficos del Proyecto

Los goals espec�ficos de proyecto se definen en un fichero llamado maven.xml, que es muy parecido al build.xml de Ant. Aqu� est�n los pasos para crear un goal espec�fico de proyecto en Maven:

  1. Crea un fichero llamado maven.xml en el directorio ra�z del proyecto:
    c:\daven\maven.xml
  2. A�adele el siguiente fragmento de XML:
    <project>
        <goal name="myGoal-1">
            <mkdir dir="c:\myFolder"/>
            <echo>Hello Maven</echo>
        </goal>
    </project>
    
  3. Invoca el goal:
    maven myGoal-1

Como has podido ver, con maven.xml, Maven puede actuar exactamente igual que Ant (De echo, mkdir es una tarea Ant). Maven puede ejecutar cualquier tarea Ant, y tambi�n soporta la mayor�a de las etiquetas JSTL, lo que le proporciona l�gica b�sica y funcionalidades de bucles. Por ejemplo, si quieres crear un goal que cree cinco directorio, podr�as utilizar esto:

<goal name="myGoal-2">
    <c:forEach  begin="1" end="5" indexVar="i">
        <mkdir dir="c:\myFolder${i}"/>
        <echo>${i}</echo>
    </c:forEach>
</goal>

El fichero maven.xml realmente es un script Jelly. Jelly es un lenguaje de script de prop�sito general, basado en XML. Maven lo utiliza, pero no es espec�fico de Maven.

Jelly = XML Ejecutable

Podr�as utilizar el motor Rhino JavaScript o Jython para crear una aplicaci�n que proporcione capacidades de script para los usuarios finales. Sin embargo, una alternativa atractiva es Jelly, un lenguaje de script basado en XML de Apache. Jelly es una tecnolog�a de prop�sito general que permite a los desarrolladores a�adir capacidades de script a sus aplicaciones Java. Aqu� puedes ver algunas de las caracter�sticas que lo hacen tan atractivo:

  1. Su s�ntaxis est� basada en XML, que �s ampliamente conocido y soportado.
  2. Puedes ampliarlo f�cilmente creando tus propias etiquetas.
  3. Proporciona un gran conjunto de librer�as de etiquetas, incluyendo algunas que imitan a JSTL y tareas Ant.
  4. Soporta un superconjunto de JSPs EL (expression language).

Maven utiliza Jelly como lenguaje de script, pero Jelly es un producto independiente y no est� unido a Maven. La site de Jelly lo describe como XML ejecutable, similar a las tareas Ant o a las etiquetas JSP personalizadas pero de prop�sito m�s general.

Para m�s informaci�n sobre Jelly, visita http://jakarta.apache.org/commons/jelly.

.�Extender un Goal

Puedes extender un goal existente de forma espec�fica para el proyecto definiendo elementos preGoal y/o postGoal en maven.xml. Por ejemplo, si est�s contento con el goal interno de Maven clean pero te gustar�a que Maven tambi�n limpiara el cach� temporal de tu servidor de aplicaciones, podr�as extender el goal clean con un elemento postGoal. Mi servidor de aplicaciones, Caucho Resin, utiliza un directorio llamado WEB-INF/work para sus ficheros temporales. Intenta a�adir el siguiente bloque de c�digo a maven.xml:

<postGoal name="clean:clean">
    <delete dir="${basedir}/WEB-INF/work"/>
    <echo>Deleted Resin work directory</echo>
</postGoal>

Luego ejecuta de nuevo el goal clean:

maven clean

.�Goals Multi-Proyecto (Plug-ins)

Maven te permite crear goals gen�ricos reutilizables, que en mi opini�n son los que lo hacen m�s �til. En comparaci�n, Ant soporta tareas reutilizables, pero no targets reutilizables. Para crear un goal reutilizable, necesitas crear un plug-in.

Como ejemplo, yo utilizo Kodo de Solarmetric, una herramienta de mapeo objeto/relacional compatible JDO. JDO es una gran tecnolog�a, pero a�ade un paso extra al proceso de construcci�n. Espec�ficamente, tienes que ejecutar una tarea independiente que a�ade las funcionalidades de persistencia a tus ficheros de clases (JDO se refiere a esto como mejora de byte-codes). Afortunadamente, puedes llamar al mejorador de bytes-codes desde un goal de Maven. Y como yo utilizo Kodo en varios proyectos, es un gran candidato para un goal multi-proyecto, en otras palabras, para ser un plug-in.

Por motivos de simplicidad, empecemos con un plug-in "hello World" ligeramente menos ambiguo. Realiza los siguientes pasos para crear un plug-in de Maven m�nimo:

  1. Crear un directorio para el plug-in:
    <USER_HOME>\.maven\plugins\maven-hello-plugin-1.0
  2. Crea el fichero plugin.jelly con el nombre <USER_HOME>\.maven\plugins\maven-hello-plugin-1.0\plugin.jelly y con este contenido:
    <project>
        <goal name="hello">
            <echo>Hello Maven Plug-in!</echo>
        </goal>
    </project>
    
  3. Crea un fichero project.xml m�nimo dentro de la carpeta del plug-in: <USER_HOME>\.maven\plugins\maven-hello-plugin-1.0\project.xml y con este contenido:
    <project></project>
    

    Este fichero project.xml obviamente no a�ade ning�n valor a tu plug-in, y l�gicamente tu no lo necesitas. Pero Maven dar� un mensaje de error si no se lo proporcionas. Los plug-ins m�s sofisticados hacen uso de este fichero para extender el POM con configuraciones espec�ficas del plug-in.

  4. Llama al nuevo plug-in:
    maven hello
    

�Has completado tu primer plug-in!

.�M�s que una Herramienta de Construcci�n

Aunque he descrito y utilizado Maven como una herramienta de construcci�n, realmente es m�s que eso. La site de Maven lo describe como "una herramienta de control y comprensi�n de proyectos Java". Por ejemplo, el POM (project.xml) tiene etiquetas para especificar nombres de desarrolladores, sus direcciones de correo, la fecha de inicio del proyecto, etc. Goals como site:generate utilizar�n esa informaci�n para auto-generar una site web para documentar tu proyecto.

Recuerda que el poder de Maven est� en sus plug-ins. Por eso, pierde algo de tiempo explorando todos los plug-ins y goals que proporciona. Si utilizas grandes scripts de construcci�n y est�s cansado de copiar-y-pegar, Maven y su larga lista de plug-ins te har�n la vida m�s f�cil.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR