Ant Tareas Básicas
Descripción
En este artículo vamos a hablar de las tareas más comunes que vienen implementadas por defecto en Ant. La versión utilizada es la 1.4.
javac
La tarea javac sirve para compilar uno o más ficheros fuente en Java. Únicamente se compilan los ficheros que no tengan un fichero .class actualizado (es decir, cuando no existe, o cuando existe pero es más antiguo que el fichero fuente).
Un ejemplo sencillo de uso es el siguiente:
Con esta tarea, se compilan todos los fuentes del directorio fuentes (que debe estar situado en el directorio actual). Las clases resultantes se guardan en el directorio classes (ídem). El classpath en el que buscar clases existentes es /home/jh/lib.
Este ejemplo es equivalente a ejecutar "javac -sourcepath fuentes -classpath /home/jh/lib -d clases *.java"
Por defecto, se utiliza el compilador disponible en el sistema. Para ello, la variable de entorno JAVA_HOME debe apuntar al directorio base del JDK disponible.
Sin embargo, es posible que queramos compilar con otro compilador distinto. Para ello, podemos modificar la propiedad "build.compiler". En el siguiente ejemplo se usa el compilador jikes:
Otros valores de esta propiedad son: classic (javac 1.1 y 1.2), modern (javac 1.3 y 1.4), kjc (del proyecto KOPI), gcj (de GNU), sj (de Symantec), extJava y jvc (de Microsoft).
Algunos de los atributos que admite esta tarea son:
- verbose: produce información más detallada sobre el proceso de compilación
- debug: indica si las clases generadas incluyen información de debug (por defecto, off)
- nowarn: pasa el modificador -nowarn al compilador, para que no genere mensajes de warning (por defecto, off)
- deprecation: pasa el modificador -deprecation al compilador, para que muestre información detallada sobre el uso de métodos en desuso (por defecto, off)
- target: genera código para una versión concreta de la máquina virtual, mediante el modificador target pasado al compilador (por ejemplo, target="1.1")
- optimize: indica al compilador que produzca código optimizado
- failonerror: indica si el compilador debe seguir compilando cuando encuentre errores (por defecto, true)
Un ejemplo de uso con todos ellos podría ser:
verbose="true" debug="true" nowarn="false" deprecation="false"
target="1.2" optimize="true" failonerror="true"/>
Existen más atributos, de uso más específico. Además, algunos pueden ser utilizados como elementos internos del elemento javac, en lugar de atributos. Para información detallada sobre todo ello, se recomienda consultar la documentación oficial de Ant.
java
La tarea java sirve para ejecutar una aplicación Java. Por defecto, la aplicación se ejecuta en la misma máquina virtual que el propio Ant.
Algunos de los atributos más comunes son:
- classname: clase Java a ejecutar
- classpath: classpath a utilizar en la ejecución
- fork: indica que la aplicación debe iniciarse en una máquina virtual distinta a la de Ant (por defecto, está desactivado)
- jar: fichero .jar a utilizar (que debe tener una clase con un método main). Si se utiliza este atributo, debe usarse también el atributo fork.
- dir: en caso de usar fork, indica el directorio desde el que se lanza la nueva máquina virtual
- jvm: en caso de usar fork, indica el comando para invocar a la nueva máquina virtual (por defecto, java)
Es posible indicar argumentos para la clase (o fichero .jar) a ejecutar. Para ello deben utilizarse elementos arg anidados, de la siguiente manera:
Este ejemplo es equivalente a ejecutar "javac -claspath clases Prueba 1"
Análogamente, es posible indicar argumentos para la máquina virtual, mediante elementos jvmarg anidados:
También es posible determinar el valor de una propiedad de sistema mediante un elemento sysproperty anidado, de la siguiente manera:
Las propiedades definidas de esta manera son accesibles desde el código Java, mediante el método System.getProperty(), pasando como parámetro el nombre de la propiedad ("prueba.nombre" en el ejemplo anterior).
Existen otros atributos y opciones más específicos. Para más detalles se recomienda consultar la documentación oficial de Ant.
javadoc
La tarea javadoc sirve para generar la documentación de los fuentes en formato Javadoc. La mayor parte de sus atributos se corresponden con opciones del comando javadoc, por lo que se recomienda consultar la documentación oficial de javadoc.
Un ejemplo de uso bastante completo sería el siguiente:
packagenames="p1.sub1,p1.sub2,p2"
verbose="true" author="true" locale="es_ES"
nodeprecated="true" nodeprecatedlist="true"
private="true" splitindex="true" version="true"
windowtitle="Documentación de mi aplicación"
doctitle="Aplicación"
header="Documentación de mi aplicación"
footer="Una aplicación interesante..."
stylesheet="css/estilos.css"
/>
Algunos de los atributos más comunes de javadoc son:
- sourcefiles: lista separada por comas de los ficheros fuente .java a utilizar
- sourcepath: ruta donde buscar ficheros fuente .java a utilizar
- classpath: ruta donde buscar ficheros .class a utilizar
- destdir: directorio donde guardar la documentación generada como páginas HTML
- packagenames: lista separada por comas de los paquetes a utilizar
- excludepackagenames: lista separada por comas de paquetes a excluir (para no ser utilizados en la generación de la documentación)
- packageList: nombre de un fichero que contiene una lista de nombres de paquetes a utilizar
- verbose: indicador para mostrar mensajes acerca de la ejecución de javadoc
- access: indicador del tipo de acceso que tienen los miembros y métodos a documentar de las clases. Debe ser public, protected, package o private.
- author: indicador para incluir las etiquetas @author
- locale: locale a usar (ej.: es_ES)
- nodeprecated: indicador para ignorar las etiqetas @deprecated
- nodeprecatedlist: indicador para no generar una lista con elementos en desuso
- nohelp: indicador para no generar un enlace de ayuda
- noindex: indicador para no generar el índice de identificadores
- nonavbar: indicador para no generar la barra de navegación
- notree: indicador para no generar el árbol jerárquico de clases
- package: indicador para mostrar únicamente los miembros y métodos de las clases con modificadores de acceso public y protected y sin modificador
- private: indicador para mostrar todos los miembros y métodos
- protected: indicador para mostrar únicamente los miembros y métodos públicos y protegidos de las clases
- public: indicador para mostrar únicamente los miembros y métodos públicos de las clases
- splitindex: indicador para dividir por letras el índice de identificadores
- use: indicador para generar páginas de uso de las clases y paquetes
- version: indicador para incluir las etiquetas @version
- old: indicador para generar la salida en formato 1.1
- windowtitle: título a mostrar en la barra de título del navegador
- doctitle: texto HTML a usar como título del índice de paquetes
- header: texto HTML a usar como encabezado de cada página generada
- footer: texto HTML a usar como pie de cada página generada
- bottom: texto HTML a usar al final de cada página generada
- stylesheet: hoja de estilos CSS a usar
copy
La tarea copy sirve para copiar ficheros y directorios, igual que cp en Linux o copy en MS-DOS y Windows. Por defecto, sólo se copian ficheros que sean más recientes que el destino o que sean nuevos.
La forma de indicar qué ficheros hay que copiar es mediante atributos o mediante filesets. Los filesets serán explicados en un artículo posterior. De momento, utilizaremos algunos ejemplos sencillos:
Para copiar un único fichero f, a otro f2:
Para copiar un fichero f a un directorio d:
Para copiar un directorio d1 a otro directorio d2:
Para copiar todos los ficheros .xml a un directorio d:
Los atributos de la tarea copy son:
- file: el fichero a copiar, si sólo es uno
- tofile: el fichero destino, cuando se copia un único fichero
- todir: el directorio de destino
- overwrite: fuerza la escritura de los ficheros, aún cuando el destino sea más reciente que el origen (por defecto es no)
- preservelastmodified: mantiene la fecha de modificación del fichero original (por defecto es no)
- includeEmptyDirs: copia directorios vacíos (por defecto es no)
- flatten: copia todos los ficheros a un mismo directorio, ignorando la estructura de directorios existente
- filtering: indica si en la copia se hace filtrado de palabras, mediante elementos filterset (por defecto, es no). Los filterset serán explicados en un artículo posterior.
delete
La tarea delete sirve para eliminar ficheros y directorios, igual que rm en Linux o delete en MS-DOS y Windows. Algunos ejemplos de uso son:
Para borrar un único fichero f:
Para borrar un directorio d entero, incluyendo los subdirectorios no vacíos:
Para borrar los ficheros .class de un directorio d:
Los atributos de delete son:
- file: el fichero a borrar, si es uno solo
- dir: el directorio a borrar
- verbose: indica el nombre de cada fichero a borrar (por defecto es false)
- quiet: en caso de error no se muestra ningún mensaje, a menos que se haya ejecutado Ant con -verbose o -debug (por defecto es false). Este indicador intenta simular el parámetro -f del rm de UNIX.
- failonerror: si el atributo quiet es false, indica si un error en el borrado debe o no detener la ejecución de la tarea (por defecto es true). Si quiet es true, se ignora el valor de failonerror.
- includeEmptyDirs: si está puesto a true, también borra los directorios vacíos (por defecto es false) Existen cinco atributos más, oficialmente declarados en desuso. Por ello no los comentaremos aquí.
mkdir
La tarea mkdir sirve para crear un directorio.
El único atributo que tiene es dir, con el directorio a crear.
Un ejemplo de uso es:
move
La tarea move sirve mover uno o más ficheros o un directorio, a un nuevo directorio, igual que mv en Linux o move en MS-DOS y Windows. Por defecto, si el destino existe, es sobreescrito. Si la sobreescritura se deshabilita, el origen sólo es movido si es más reciente que el destino, o si éste no existe.
Es posible usar filsets para seleccionar conjuntos de ficheros, al igual que con la tarea copy.
Algunos ejemplos de uso son:
Para cambiar de nombre un fichero, de f1 a f2:
Para mover un fichero f a un directorio d:
Para mover un directorio d1 a otro d2:
Para mover todos los ficheros .xml a un directorio d:
Los atributos de la tarea move son:
- file: fichero origen a mover
- tofile: fichero destino
- todir: directorio al que mover el origen
- overwrite: indicador para habilitar la sobreescritura (por defecto es true)
- includeEmptyDirs: incluye los directorios vacíos (por defecto es yes)
- flatten: mueve todos los ficheros a un mismo directorio, ignorando la estructura de directorios existente
- filtering: indica si al mover se hace filtrado de palabras, mediante elementos filterset (por defecto, es no). Los filterset serán explicados en un artículo posterior.
chmod
La tarea chmod sirve para cambiar los permisos de acceso de los ficheros. Esta tarea sólo tiene efecto en sistemas de ficheros UNIX, similar al comando chmod. Se recomienda consultar la ayuda del comando chmod (man chmod, info chmod o chmod --help) para más información.
Un ejemplo sencillo de uso es el siguiente, para añadir el permiso de ejecución al propietario y al grupo del fichero:
Si en lugar de un fichero se indica un directorio, se cambiarán los permisos del directorio pero no los permisos de los ficheros que hay en el mismo.
Para cambiar los mismos permisos de todos los ficheros de un directorio d, usaríamos algo como:
o alternativamente
En el ejemplo anterior no se modifican los permisos del propio directorio (sí los permisos de los ficheros guardados en él).
Los atributos de la tarea chmod son:
- file: fichero o directorio al cual queremos cambiar los permisos
- dir: directorio en el cual están los ficheros a los que queremos cambiar los permisos (los permisos del directorio en sí no se cambian)
- perm: expresión que indica los nuevos permisos
- parallel: en caso de indicar más de un fichero, todos los cambios se hacen usando un único comando chmod (por defecto es true)
- type: puede valer file (sólo se cambian los permisos de los ficheros), dir (sólo se cambian los permisos de los directorios) o both (se cambian los permisos tanto de ficheros como de directorios). Por defecto, es file. Además, se pueden usar los atributos includes, includesfile, excludes, excludesfile y defaultexcludes, para indicar conjuntos de ficheros. El uso de estos atributos se explicará en un próximo artículo dedicado a conceptos avanzados.
touch
La tarea touch sirve para cambiar la fecha y hora de modificación de un fichero. Por defecto, se asigna la fecha y hora actuales. En caso de que el fichero no exista, lo crea.
Un ejemplo de uso es:
Para indicar una hora concreta, se podría hacer:
Es posible usar touch sobre un conjunto de ficheros, mediante un elemento fileset anidado. Para cambiar la fecha y hora de todos los ficheros de un directorio d, se usaría algo como:
Los atributos de touch son:
- file: nombre del fichero cuya fecha y hora de modificación se quieren cambiar
- millis: nueva fecha y hora de modificación, expresada en milisegundos, desde el 1 de Enero de 1970
- datetime: nueva fecha y hora de modificación, en formato "MM/DD/AA HH:MM AM_o_PM"
echo
La tarea echo sirve para mostrar un mensaje en la salida estándar o en un fichero.
Para mostrar un mensaje por pantalla:
Para guardar un mensaje en un fichero de texto f, que será creado o sobreescrito:
Para añadir un mensaje a un fichero f2, creándolo si no existe:
sleep
La tarea sleep sirve para producir un retardo de duración determinada. No se garantiza en absoluto que el retardo tenga la duración indicado, ni siquiera que llegue a producirse, ya que es una prestación que depende del sistema operativo, de la granularidad de su reloj, de la carga del sistema, etc.
El tiempo a esperar se obtiene como la suma de las horas, minutos, segundos y milisegundos indicados. Alguno de estos valores puede ser negativo siempre y cuando la suma total sea positiva.
Para esperar 1 hora, 20 minutos, 35 segundos y 500 milisegundos, usaríamos algo como:
Además, es posible utilizar el atributo failonerror para detener la ejecución de ant en caso de que se produzca un error durante la espera.
También es posibe usar sleep sin ningún atributo. En este caso no se produce ninguna espera. Simplemente, Ant cede el procesador a otros procesos del sistema.
exec
La tarea exec sirve para ejecutar comandos de sistema. Es posible indicar un sistema operativo en el que ejecutar el comando. En este caso, el comando sólo se ejecutará si el sistema operativo actual es el indicado.
Un ejemplo muy básico, para listar en formato ancho el contenido de "C:" en un sistema Windows 2000:
Los atributos más importantes de exec son:
- executable: orden a ejecutar, sin parámetros (los parámetros deben indicarse mediante un elemento anidado arg)
- dir: directorio en el que ejecutar el comando
- os: nombre del sistema operativo en el que se debe ejecutar el comando
- output: fichero al cual dirigir la salida del comando
- timeout: tiempo en milisegundos para que el comando termine (pasado ese tiempo, el comando será interrumpido)
- failonerror: indicador para detener Ant en caso de que el comando devuelva un código de retorno no nulo (por defecto es false)
- newenvironment: indicador para utilizar un entorno vacío sin ninguna variable de entorno definida (por defecto es false)
Es posible pasar variables de entorno al comando a ejecutar, de la siguiente manera:
0 comentarios