Introducción a Ant

¿Qué es Ant?

A todos los que hallais "jugado" alguna vez con GNU/Linux, os sonará una herramienta para compilar programas llamada make. Pues bien, make es una muy útil herramienta para automatizar la configuración, compilación e instalación de software bajo GNU/Linux (y otros sistemas).

Seguramente, muchos de vosotros (yo entre ellos) habeis creado algunos scripts en ficheros para hacer esto en Java, aunque sea de forma rudimentaria. Un fichero ejecutable (un sencillo .bat en Windows, o un .sh en GNU/Linux) para que realice todo el proceso ha seguir, por ejemplo, actualizar el classpath, compilar el código, copiar algunas clases compiladas a otro directorio (por ejemplo los servlets compilados) y generar la documentación con javadoc (por cierto, busco voluntarios para un artículo sobre javadoc). Se que algunos IDEs hacen gran parte de estas cosas, pero seguro que no hacen todo lo que quereis "de un golpe".

Aqui es donde llega Ant. Ant es una herramienta del proyecto Jakarta de Apache que viene a ser un equivalente de make (mucho más moderno) para los desarroladores Java (aunque en teoria nada impide usarlo con otros lenguajes). La versión actual es la 1.4, recien liberada, y la podeis descargar desde su página web. Seguramente Ant no es tan sencilla como el JBuilder, ni tampoco como escribir un pequeño script, pero si os puedo decir que es muy potente, y que si os acostumbrais a usarla, con proyectos medianamente grandes, no dejareis de hacerlo nunca.

Sin tener que decir que Ant es opensource y que tenemos disponible el código para curiosear si queremos, entre las ventajas que presenta están que usa XML como formato de sus ficheros, por lo que no es difícil de entender, que esta escrito en Java, por lo cual tenemos las ventajas de la multiplataforma (no hace falta un script para cada sistema operativo), y que es facilmente extensible e integrable com muchas herramientas (como por ejemplo el fantastico editor JEdit o el IDE Netbeans).

Por último, si después de haber leido lo que es Ant, y estar convencido de que te puede ayudar, vete a su página de descarga y consigue la última versión, puedes descargar la actual, la 1.4, desde aquí mismo.

Para trabajar con Ant se necesitan tres cosas, seguramente las tienas las tres:

Supongo que lo tenemos todo, así que podemos empezar con lo que nos interesa.

El fichero build.xml

Como hemos dicho, Ant se basa en ficheros XML. Normalmente configuramos el trabajo a hacer con nuestra aplicacion en un fichero llamado build.xml, así que vamos a ver algunas de las etiquetas que podemos "meter" ahí.

project
Este es el elemento raíz del fichero XML, y como tal, podeis adivinar que solo puedo haber uno en todo el fichero, el que se corresponde a nuestra aplicación Java.
target
Un target u objetivo es un conjunto de tareas (ver el siguiente elemento, task) que queremos aplicar a nuestra aplicación en algún momento. Se puede hacer que unos objetivos dependan de otros, de forma que eso lo trate Ant automáticamente.
task
Un task o tarea es un codigo ejecutable que aplicaremos a nuestra aplicación, y que puede contener distintas propiedades (como por ejemplo el classpath). Ant incluye ya muchas básicas, como compilacion y eliminación de ficheros temporales, pero podemos extender este mecanismo si nos hace falta. Luego veremos algunas de las disponibles.
property
Una propiedad o property es simplemente algún parametro (en forma de par nombre-valor) que necesitamos para procesar nuestra aplicación, como el nombre del compilador, etc. Ant incluye ya las más basicas, como son BaseDir para el directorio base de nuestro proyecto, ant.file para el path absoluto del fichero build.xml, y ant.java.version para la versión de la JVM.

Un pequeño ejemplo

Antes de comlicarnos la vida explicando todos los entresijos que nos ofrece Ant, que no estrarán en este artículo, veremos un pequeño ejemplo que nos situe en el comienzo realmente realmente:

<?xml version="1.0"?>

<project name="ProbandoAnt" default="compilar" basedir=".">

  <!-- propiedades globales del proyecto -->
  <property name="fuente" value="." />
  <property name="destino" value="classes" />

  <target name="compilar">
    
    <javac srcdir="${fuente}" destdir="${destino}" />
  </target>
</project>

Este sencillo fichero requiere poca explicación, simplemente declaramos el