Introduccrión a Ant
domingo, septiembre 16, 2001 at 2:00AM
Introducción a Ant
¿Qué es Ant?
A todos los que hayais "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:
- Ant. Obviamente.
- JDK. Ant no deja de ser una aplicación Java
- Un parser XML. Da igual cual, pero como hemos dicho Ant se basa en ficheros XML, y es bueno obligar al usuario a usar tus productos sin posibilidad de elegir, aunque algunas empresas lo hagan ;-). Si te has bajado la versión binaria de Ant no tienes porque preocuparte, porque ya incluye uno.
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 proyecto indicando la acción a realöizar por defecto (default="compilar"), e indicamos que el directorio base es el actual (basedir="."). Después indicamos en sendas etiquetas property los directorios de origen y de destino (property name="fuente" value=".", y property name="destino" value="classes"), y por ultimo declaramos un target llamado compilar, que es el que hemos declarado como por defecto. En este objetivo tenemos una única tarea, la de compilación javac, a la que por medio de los atributos srcdir y destdir le indicamos los directorios fuente y destino, que recogemos de las propiedades anteriormente declaradas con ${fuente} y {destino}.
Bien, pues lo único que nos queda es compilar nuestro código, asi que simplemente, estando situados en el directorio donde tenemos nuestro build.xml, desde una ventana de DOS o terminal GNU/Linux podemos hacer:
[PATH_TO_ANT]ant
Esto funciona así porque hemos declarado compilar como el obejtivo por defecto. Si fuera tuvieramos otro como por defecto, pero la regrla general es:
[PATH_TO_ANT]ant nombre_objetivo
Haciendo más cosas
Una vez que hemos visto como compilar un programa, veremos como hacer cosas más interesantes, esta claro que eso es mucho trabajo para ser sólo un sustituto de javac. En este ejemplo veremos como eliminar las clases de versiónes anteriores, como generar la documentación con javadoc y veremos la dependencia entre los distintos objetivos.
<?xml version="1.0"?>
<project name="ProbandoAnt" default="todo" basedir=".">
<!-- propiedades globales del proyecto -->
<!-- directorios importantes -->
<property name="fuente" value="." />
<property name="destino" value="classes" />
<property name="doc" value="doc" />
<!-- caracteristicas del proyecto -->
<property name="paquetes" value="com.javahispano.*" />
<property name="classpath" value="./lib/misclases.jar" />
<!-- textos relativos al proyecto -->
<property name="proyecto" value="Probando Ant v2" />
<property name="copyright" value="javaHispano. Copyright 2001" />
<target name="limpiar">
<!--
Eliminamos los directorios de la vez anterior.
Eliminamos los dos juntos para no favorecer que
existan versiones de docuemntacion que no se
corresponden con las clases compiladas y viceversa
-->
<delete dir="${destino}" />
<delete dir="${doc}" />
</target>
<target name="compilar" depends="limpiar">
<!--
Creamos el directorio si no existe. Y no existira porque
lo hemos eliminado con el objetivo limpiar, del cual
depende compilar
-->
<mkdir dir="${destino}" />
<!--
Compilamos nuestras clases, situadas en ${fuente}
al directorio destino ${destino}, y con el classpath
definido en ${classpath}
-->
<javac srcdir="${fuente}"
destdir="${destino}"
classpath="${classpath}"
/>
</target>
<target name="documentar" depends="limpiar">
<!--
Creamos el directorio si no existe. Y no existira porque
lo hemos eliminado con el objetivo limpiar, del cual
depende documentar
-->
<mkdir dir="${doc}" />
<!--
Generamos la documentcion de nuestro proyecto.
Los atributos de esta clase son incontables, asi
que ahora solo mostreré unos pocos. Consultar la
documentación de Ant y de javadoc si necesitais
algo más.
-->
<javadoc packagenames="${paquetes}"
sourcepath="${fuente}"
destdir="${doc}"
author="true"
version="true"
private="true"
locale="es"
windowtitle="API de ${proyecto}"
doctitle="${proyecto}"
bottom="${copyright}"
/>
</target>
<target name="todo" depends="compilar, documentar">
</target>
</project>
Ya que he comentado el código no creo que haga falta repetir lo mismo, así que no lo haré. Solo hay que fijarse en el atributo depends de los distintos objetivos. Este atributo, indica que para que un objetivo se ejecute, antes se deben ejecutar los anteriores en este mismo proceso. Esto quiere decir, en nuestro ejemplo, que aunque tanto compilar como documentar depende de limpiar, este último solo se ejecuta una vez si procesamos todo, que depende de los dos primeros.
Conclusión
Espero que hayais visto que aunque la primera vez que tengais que escribir todo, puede ser "un poco de trabajo", luego compensa, ya que no tendreis que volver a tener que preocuparos de nada a la hora de compilar/empaquetar/docuemntar, etc vuestra aplicación, ni siquiera aunque cambieis de sistema operativo.
En el próximo artículo mostraré otras tareas interesantes de las que vienen por defecto con Ant, como por ejemplo la copia de archivos de un lugar a otro o el empaquetar automático en ficheros jar. Suna bien, ¿no?.
|
j2se 