Cómo Crear una Tarea Ant

0
22169

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.

Dejar respuesta

Please enter your comment!
Please enter your name here