Make es una herramienta de la línea de comandos que utiliza un archivo de texto plano (Makefile) que contiene una serie de reglas para transformar una cosa en otra y son utilizadas para controlar las etapas de desarrollo de un proyecto de software que van desde la configuración del entorno hasta la instalación de los binarios y las páginas del manual.
Ejemplos:
Ant es una herramienta con el mismo próposito de make para proyectos en Java escrita en Java.
Algunas diferencias entre estas herramientas son:
La página http://jakarta.apache.org/ant/ es la página oficial del proyecto Ant, ahí podemos encontrar las fuentes, binarios y documentación entre otras cosas.
Ant solía ser parte del proyecto Jakarta de Apache el cual está destinado a proveer soluciones del lado del servidor, de fuente abierta y alta calidad para la plataforma Java, pero ha tomado tanta importancia que se ha independizado y ahora es un subproyecto de Apache.
La distribución binaria de Ant tiene las siguiente estructura de directorios:
ant +--- bin // scripts de arranque | +--- lib // archivos jar de Ant más las dependencias necesarias | +--- docs // documentación | +--- ant2 // una descripción de los requerimentos de ant | | | +--- images // varios logotipos para documentación html | | | +--- manual // documentación | +--- etc //contiene recursos xsl para: // crear reportes para varias tareas // migrar los archivos build y eliminar la advertencia 'deprecated' // ... etc.
Las variables de entorno, ANT_HOME
, JAVA_HOME
y PATH
deberán tener asignados los valores siguientes:
Unix (bash)
Asumiendo que Ant está instalado en /usr/local/ant.
export ANT_HOME=/usr/local/ant
export JAVA_HOME=/usr/java/j2sdk1.4.0
export PATH=${PATH}:${ANT_HOME}/bin
Unix (csh)
setenv ANT_HOME /usr/local/ant
setenv JAVA_HOME /usr/java/ j2sdk1.4.0
set path=( $path $ANT_HOME/bin )
Ant lee un archivo de configuración build.xml y ejecuta un árbol de tareas las cuales están representadas como elementos XML , cada tarea es llevada a cabo por una clase Java que implementa la interfaz org.apache.tools.ant.Task
.
Para entender como funciona Ant y poder usarlo es necesario que conozcamos un poco a XML.
XML (eXtensible Markup Language) es una sintaxis que nos permite crear nuestros propios lenguajes para estructurar contenidos utilizando etiquetas. Al igual que HTML utliza etiquetas para denotar los elementos que forman el documento con la diferencia de que XML sólo se interesa por la estructura y no por la presentación de los contenidos.
Un elemento típico de XML está formado de la siguiente manera:
Si el contenido del elemento XML es vacío, el elemento se escribirá con un sólo
En el documento existe un sólo elemento raíz dentro del cual estarán contenidos todos los demás, dándole a todo documento XML una estructura arborescente o de árbol. Cumplir con las condiciones sobre la escritura de los elementos es lo que se conoce como tener un documento XML bien formado.
Para ser válido, los elementos del documento deben seguir las reglas definidas en una DTD (Document Type Definition), para cada dialecto de XML tenemos una DTD que indica cuales son las relaciones válidas de los elementos en tal dialecto.
Nota.-Los comentarios dentro de un documento XML van entre los símbolos '<!--' y '-->'
Veamos como se ve un archivo build.xml para ilustrar el uso y funcionamiento de Ant.
Podemos ver en el ejemplo anterior como definimos, identificamos e invocamos las tareas en Ant. Las tareas se llevan a cabo valiéndose de elementos que forman parte (o se incorporan posteriormente a la aplicación, más de eso adelante) de Ant como los elementos java o javac. Veamos a continuacion algunos elementos de este lenguaje de scripting usados comunmente en los archivos build.xml:
Tarea | Descripción |
---|---|
copy | Copia un archivo, grupo de archivos o toda una estructura de directorio |
mkdir | Crea un directorio. |
javac | Invoca al compilador de java. Esta tarea nos permite asignar el classpath, localización de las clases compiladas, compilador, etc. |
java | Ejecuta una aplicación Java dentro del proceso Ant. |
ant | Invoca un tarea definida dentro de un archivo build.xml |
jar | Genera un archivo jar |
Envía un mensaje de correo a una dirección específica. |
|
javadoc | Invoca el compilador de documentación javadoc |
Creación de una ear emplazada en Jboss.
Como crear una tarea propia dentro de Ant.
org.apache.tools.ant.Task
u otra clase diseñada para ser extendida.public void
y deberá tener un solo argumento. El nombre del método deberá comenzar con set seguido por el nombre del atributo. Siguiendo las convenciones de Java para nombrar métodos.org.apache.tools.ant.TaskContainer
. Si lo hace su tarea no soportará cualquier otro elemento anidado.public void addText(String)
. Ant no expande propiedades en el texto que pasa a la tarea.Object
. El nombre del método create deberá comenzar con create, seguido por el nombre del elemento. Un método add (o addConfigured) deberá ser public void
que toma un sólo argumento de tipo Object
con un constructor no-arg. El nombre del método add ( o addConfigured) deberá comenzar con add (o addConfigured) seguido del nombre del elemento.public void execute()
, sin argumentos, que levante una BuildException
. Este método es el que implementa la tarea en sí.import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Task; public class TaskPropio extends Task { private String msg; // El metodo que ejecuta la tarea public void execute() throws BuildException { System.out.println(msg); } // El setter del atributo "message" public void setMessage(String msg) { this.msg = msg; } }
Agregar la tarea al sistema es igualmente sencillo:
Ejemplo
<?xml version="1.0"?>
<project name="OwnTaskExample" default="main" basedir=".">
<taskdef name="mytask" classname="MyTask"/>
<target name="main">
<mytask message="Hola Perro!!"/>
</target>
</project>