Javier Antoniucci

Ingeniero en Informática

Somos expertos en Java/J2EE

Ver todos los tutoriales del autor

Fecha de publicación del tutorial: 2007-07-23

Tutorial visitado 15.121 veces Descargar en PDF
Este tutorial tiene como objetivo explicar cómo crear una tarea nueva Ant y utilizarla en un script.Ov

Cómo Crear una Tarea Ant

Introducción

Seguramente todos hemos usado scripts de Ant para compilar, empaquetar, etc nuestros proyectos. Quizás también hemos incursionado en su utilización para la ejecución de tareas de mantenimiento. También podríamos haberlo utilizado para instalar software o actualizaciones. Pero en todos los casos hemos visto el potencial de una herramienta que cuenta con virtudes como ser multiplataforma, madura y con un extensísimo soporte.

¿Pero no está obsoleto? ¿No está reemplazado por Maven? No, decididamente no. Quizás uno de sus usos habituales, la construcción de software (make) si lo esté, pero de ninguna forma Maven es competente en el terreno de los scripts. Está totalmente especializado en el ciclo de construcción de software.

¿y tan potente es Ant? Si, en su terreno si, y lo que no tenga se añade como veremos a continuación.

El objetivo de este tutorial es explicar cómo crear una tarea nueva Ant y utilizarla en un script. Dicho desarrollo consta de los siguientes pasos:

  • Creación de la tarea

  • Configuración

  • Utilización

Obviamente, necesitaremos tener instalado el Ant y un entorno de desarrollo (en el tutorial se utilizará Ant 1,7 y Eclipse 3,2).

Creación de la tarea

Comenzamos creando un proyecto Java:

Creamos una carpeta “src” donde colocaremos los fuentes.

En la solapa de Libraries, pinchamos en “Add externals JARs” y seleccionamos todos los JARs de la carpeta “lib” del Ant.

Le damos a “Finish” y creamos una nueva clase:

Completando los siguientes datos:

Una vez creada la clase, la completamos como se muestra a continuación:

package com.autentia.tutoriales.crearTareaAnt;


import org.apache.tools.ant.BuildException;

import org.apache.tools.ant.Task;


public class NuevaTarea extends Task {

private String mensaje;


public void setMensaje(String m) {

this.mensaje = m;

}


public void execute() throws BuildException {

log(mensaje);

}

}

Listo! Ya tenemos una tarea muy simple: muestra un mensaje. Pero bueno, nos damos cuenta que el resto de la complejidad se la añadimos dentro del execute() y que los parámetros que necesite se añaden como sets.

Ahora vamos a empaquetarlo en un JAR:

Le damos a Finish y entonces vemos el nuevo JAR:

Ahora pasamos a la configuración de la tarea para su posterior utilización.

Configuración

Antes de configurar una tarea debemos comprender su ciclo de vida:

Cada tarea indicada en un fichero build sigue el siguiente ciclo de vida:

  1. La tarea es instanciada invocando el constructor sin argumentos, cuando Ant parsea el fichero build.xml. Todas las tareas indicadas con taskdef son instanciadas, incluso si posteriormente no llegan a ser utilizadas.

  2. La tarea obtiene referencias al proyecto al que pertenece y a su localización (posición dentro del fichero build) mediante los atributos project y location heredados de la clase Task.

  3. Si el usuario indicó un atributo id en la instanciación de la tarea (en el fichero build), en el objeto proyecto se guarda (durante su interpretacion) una referencia a esta tarea, mediante su método addReference(String, Object). Es posible obtener estas referencias mediante el método getReferences del objeto Project.

  4. La tarea obtiene una referencia al objetivo al que pertenece mediante el atributo target heredado de la clase Task.

  5. El método init es invocado en tiempo de parseo.

  6. En tiempo de parseo, todos los elementos hijos de la tarea (en el fichero build, los elementos XML anidados) son creados mediante los métodos createNombreHijo o instanciados y añadidos a esta tarea mediante los métodos addNombreHijo.

  7. En tiempo de ejecución,

    1. los métodos setNombreHijo son ejecutados para dar valor a los atributos de la tarea.

    2. el método addText es ejecutado, para recuperar el texto contenido en el interior del elemento XML que representa a la tarea.

    3. los atributos de los elementos hijos son establecidos mediante sus correspondientes métodos setNombreAtributo.

    4. El método execute es ejecutado al menos una vez.

Para configurar una tarea, utilizaremos la etiqueta TaskDef dentro del build.xml como se muestra a continuación (en el siguiente apartado se mostrará un build.xml completo).

<project ...>

<taskdef name="NuevaTarea" classname="com.autentia.tutoriales.crearTareaAnt.NuevaTarea"/>

...

</project ...>

Utilización

Para hacer un ejemplo de la utilización, comenzaremos por crear un fichero build.xml:

Y le añadimos:

<?xml version="1.0" encoding="iso-8859-1"?>

<project name="variasveces" default="primerTarget">


<taskdef name="NuevaTarea" classname="com.autentia.tutoriales.crearTareaAnt.NuevaTarea"/>

<target name="primerTarget">

<NuevaTarea mensaje="Hola!"/>

</target>


</project>

Ahora vamos a configurar su ejecución:

Pinchamos en “Add JARs”


Y entonces vemos que se ha añadido:

Ahora le damos a “Apply” y a “Run”.

Veremos en la consola:

Consideraciones

Recordemos que Ant es un lenguaje de scripting y que las tareas son su unidad mínima de ejecución, con lo cual deberíamos diseñarlas para que sean reutilizables en otros contextos.

Crear una nueva tarea es algo trivial pero tratándose de una herramienta tan madura y con una comunidad tan grande es imprescindible buscar primero si lo que queremos hacer no está ya implementado. Si no lo está, podría ser nuestra oportunidad de hacer una contribución open source.

¿Dónde encuentro más info?

Writing Your Own Task http://ant.apache.org/manual/develop.html

Writing Ant Tasks http://www.onjava.com/pub/a/onjava/2004/06/02/anttask.html

Conclusiones

Hemos visto que la creación de una nueva tarea es un proceso sencillo. El diseño genérico y la documentación es clave para su reutilización en otros contextos. Nuestra tarea puede reutilizar otras ya existentes en el core o en otros proyectos, en particular los filesets.

En este tutorial hemos dado sólo los primeros pasos para poder desarrollar nuestras propias tareas de Ant, que sabrás ampliar y personalizar para adaptarlos a tus necesidades. Quedan muchos temas relativos a tareas con elementos anidados, tipos enumerados, tareas con body, integración con editores, etc.

En Autentia tenemos mucha experiencia en automatización de tareas del proceso de desarrollo software, generación de código, etc. No dudes en ponerte en contacto con nosotros.

A continuación puedes evaluarlo:

Regístrate para evaluarlo

Por favor, vota +1 o compártelo si te pareció interesante

Share |
Anímate y coméntanos lo que pienses sobre este TUTORIAL: