style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Introducción a Apache Ant

En este tutorial introductorio veremos:

  • ¿Qué es Ant?
  • Ant multiplataforma
  • Modo de ejecución
  • El archivo de configuración (build.xml)
  • Estructura del build.xml
  • Tipos de etiquetas
  • Finalizando...

¿Qué es Ant?

Primero que nada, Ant es una herramienta que puede ser utilizada para un sinfín de propósitos, casi siempre orientados al desarrollo con Java, pero puede ser herramienta para un propósitos totalmente diferentes y variados.

Y bien.. pero, ¿Qué es Ant? Ant es una herramienta para realizar tareas un tanto repetitivas, su uso principal es similar al de Make, Nmake, Gnumake o JAM de UNIX. Para poder utilizar Ant es necesario tener la JDK 1.2 o posterior y un parser XML aunque los binarios de Ant ya tienen Apache Xerces2 como XML Parser por default.

La ventaja de Ant sobre herramientas como el Make de UNIX es su característica multiplataforma que explicaré a continuación, ya que Ant se basa en archivos XML de configuración, lo que hace que no dependa de las instrucciones de la shell del sistema operativo.

Ant Multiplataforma

Una de las principales ventajas de Ant es su portabilidad, el basarse en archivos XML hace que Ant pueda realizar las tareas que le definimos en cualquier Sistema Operativo.

Make por ejemplo, depende de la línea de comandos de UNIX, para borrar un archivo un Makefile utiliza el comando 'rm' sobre la línea de comandos del UNIX, para copiar utiliza 'cp', mover 'mv', etc.. lo cual no funcionaría en un Sistema Operativo Mac o Windows por ejemplo.

En Ant la diferencia es que en lugar de invocar un comando se invoca la acción en una etiqueta XML, por ejemplo si lo que queremos es borrar un archivo sería así:

<delete file="lib/prueba.jar"/>

..y Ant se encargará de interpretar esa etiqueta y utilizar el comando adecuado para borrar el archivo prueba.jar que está dentro del directorio lib y sin importar el Sistema Operativo en el que estemos!

Ant también interpreta las rutas que le especificamos según el SO en el que estemos, es decir, no importa si usamos c:\java\test o si usamos /home/bnk/java, Ant interpretará la ruta según el SO en el que estemos, automáticamente interpreta la diagonal normal o la diagonal inversa según el SO.

Modo de ejecución

Ejecutar Ant es muy sencillo, el comando 'ant' ejecuta Ant sobre los parámetros definidos en su archivo de configuración, por default el archivo de configuración se llama 'build.xml'.

ant -opciones target

El archivo de configuración (build.xml)

'build.xml' es el nombre por default del archivo de configuración, dentro de él se definen los diferentes targets (objetivos) que Ant podrá realizar, estas acciones pueden ser variadas, como compilación de clases, compresión o empaquetamiento de archivos, crear o copiar directorios, etc.., a través de las mismas targets se pueden definir dependencias de unas a otras, a manera de darle orden a su ejecución.

Estructura del build.xml

Revisaremos la estructura del build.xml con un ejemplo sencillo:

<?xml version="1.0"?>
<project default="iniciar" basedir=".">
<target name="iniciar">
        ....instrucciones....
</target>
<target name="html" depends="iniciar">
    ....instrucciones....
</target>
<target name="pdf" depends="iniciar">
    ....instrucciones....
</target>
<target name="todo" depends="html,pdf">
    ....instrucciones....
</target>
</project>

y vamos viendo que es cada parte:

<?xml version="1.0"?>

* Aqui se define que se trata de un documento XML y su versión.

<project default="iniciar" basedir=".">

* Se inicia el elemento 'project', dentro de él deberán definirse todas las tareas.
* El parámetro 'default="iniciar"' indica que el target 'iniciar' será el primero en realizarse si el comando ant no fue ejecutado con algún target definido.
* El parámetro 'basedir="."' indica que el directorio raíz de todas las tareas es el directorio actual (el punto simboliza el directorio actual).

<property name="all" value="todo "/>

* Se define la propiedad 'all' con el valor 'todo' que es como una constante que utilizaremos adelante.

<target name="iniciar">
....instrucciones....
</target>

* Se define el target con el nombre 'iniciar', dentro de ella deberán ir las tareas que debe realizar.

<target name="html" depends="iniciar">
....instrucciones....
</target>

* Se define otro target con el nombre 'html', el atributo 'depends="iniciar"' indica que se debe realizar primero el target 'iniciar' antes de poder realizar 'html'.

<target name="pdf" depends="iniciar">
....instrucciones....
</target>

Se define el target 'pdf', que también depende de que el target 'iniciar' se realice previamente.

<target name="${all}" depends="iniciar,html,pdf">
....instrucciones....
</target>

* Se define el target 'todo' (ya que invocamos la propiedad 'all' que tiene como valor la cadena 'todo') que depende de que previamente se haya ejecutado la tarea 'iniciar', 'html' y la tarea 'pdf', por lo que realizará todas.

</project>

* Se terminaron de definir los targets, se cierra la etiqueta 'project'.

Tipos de etiquetas

Como vimos en la estructura, dentro del 'build.xml' podemos hacer uso de distintas etiquetas que tendrán propósito diferente cada una:

  • project - Sólo puede haber una en todo el archivo XML, dentro de esta etiqueta se definen y engloban las targets, tareas y propiedades que podrá realizar Ant
  • property - Son valores que se definen mediante un par (nombre-valor) y que pueden ser consultados dentro de cualquier target, ejemplo: <property name="ruta" location="/home/bnk">
  • target - Es un 'objetivo' dentro del cual se definen las tareas que engloba este mismo.
  • tareas - Hay bastantes tipos de tareas para diferentes propósitos, como manipulación de archivos, compresión o compilación, ejemplo: <move file="archivo.origen" todir="dir/destino"/>

Finalizando...

Como podrán ver, Ant es una excelente solución para 'deploy', construcción de paquetes o compilación, cuenta con muchas más tareas para manipulación de archivos o directorios, les listo las más comunes:

  • Empaquetamiento y compresión de archivos vía jar, war, ear, zip, gzip, tar, cab o bzip.
  • Modificación de permisos de archivos vía chmod, chown, chgrp o attrib.
  • Manipulación de archivos y directorios vía copy, concat, delete, mkdir, move, replace o touch.
  • Compilación de código fuente Java o JSP vía javac, jspc o wljspc.
  • Generación de documentación vía javadoc.
  • Ejecución de clases vía java.
  • Conexiones remotas vía ftp, scp (para copiar vía ssh), sshexec (ejecuta vía ssh), telnet.
  • Tareas especiales para .Net.
  • Utilerías varias como echo, sound (para reproducir audio al finalizar el deploy), splash, sql.

Todo eso y mucho más podemos hacer con Ant, una lista completa de las tareas que soporta está aqui: http://ant.apache.org/manual/tasksoverview.html .

Como verán es una herramienta excelente y para muchos ámbitos necesaria, principalmente para el desarrollo web con Java haciendo Deploy.

Espero que les haya sido de utilidad, cualquier comentario o duda por favor aqui pónganlo.

Saludos!

Javier Ramírez Jr.
http://twitter.com/xbenek

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

Deploy...

No he llegado a usar ant para deployment, pero definitivamente es muy bueno para compilar y empaquetar aplicaciones.

Imagen de benek

Ant

Yo en cada proyecto me lo encuentro, aunque en los primeros proyectos los scripts por lo regular ya estaban hechos, algunos eran scripts de más de 2mil líneas... y pues todos los ejecutaban y ya.

Luego de que escribí este pequeño manual que originalmente fue para una revista informática supe que con Ant se pueden hacer muchas cosas más.

Lo he ocupado para renombrar mi biblioteca de música y videos con un patrón que me acomode, para hacer limpieza en mi equipo, organizar álbumes de fotos, etc, etc, etc. Sin duda es una herramienta muy útil!

Javier Ramírez Jr.
http://twitter.com/xbenek
http://www.javamexico.org/tema/lineamientos_de_publicacion

Imagen de cfpmx

Buen artículo.

Buen artículo.

Imagen de johonoo

Buen trabajo

Ya llevo algunas semanas trabajando con esa librería, y en realidad, me ha gustado la simplicidad reflejada en su código XML para realizar rutinarias. En el caso de un programador/desarrollador le haré más productivo, pues librará de pasos rutinarios.

Gracias por este artículo.

Hasta pronto.

saludos

hola a todos.. estoy ingresando al mundo de ANT, y me encuentro con la siguiente pared que es, compilar los jsp de un proyecto, alguien que me pueda dar una manita con algún manual o script que le haya funcionado... estaré eternamente agradecido :)

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">