Ant
Ant es una herramienta de build de Software Libre especializada en construir proyectos Java. Ant utiliza archivos XML para expresar las instrucciones de ejecución de build. Ella posee una gran variedad de tareas que permiten la realización de actividades como generación de pruebas unitarias, publicación de información, entre otras.
Algunos ejemplos de tareas pueden ser:
- Prepare -> Realiza la creación de directorios que contendrán los ejecutables.
- Compile -> Compila el código fuente del producto.
- Instrument -> Instrumenta el código para permitir la generación de información de cobertura de código.
- Compile-test -> Compila el código de pruebas unitarias automatizadas.
- Test -> Ejecuta la batería de pruebas unitarias automatizadas, genera la información en HTML de las pruebas ejecutadas con éxito y con falla y genera la información en HTMl de la cobertura de código.
- PMD -> Ejecuta la generación de información de análisis estática de código.
- Javadoc -> Ejecuta la generación de documentación de las clases en base a los comentarios en el código fuente.
- Run -> Ejecuta el software.
- Clean -> Realiza la limpieza de los directorios que contienen los ejecutables.
- Jar -> Realiza el empaquetado del software para que pueda se utilizado en producción.
El script de build puede ser ejecutado de diversas maneras y con múltiples opciones. En el caso de línea de comando, por ejemplo "ant test pmd javadoc jar", todas las secciones del archivo XML serán ejecutadas.
Ant puede ser utilizado para realizar la implantación de una aplicación JEE Web en producción. Un ejemplo de una sección que haría eso sería el siguiente:
<target name="deploy"> <deploy url="${tomcat.manager.url}" username="${tomcat.manager.username}" password="${tomcat.manager.password}" path="/${webap.name}" war="file:${warfile.path}" /> </target>
Condicionales con ant
A continuación se muestra una forma de simular los típicos condicionales "if - then - else" con tags de Ant. El ejemplo muestra como realizar diferentes acciones según el contenido de un parámetro.
<?xml version="1.0"?>
<project name="Condicional" default="if" basedir=".">
<target name="if"> <condition property="condition"> <equals arg1="${param}" arg2="VALOR1" /> </condition> <antcall target="then"/> <antcall target="else"/> </target>
<target name="then" if="condition"> <echo>El parámetro fue VALOR1</echo> </target>
<target name="else" unless="condition"> <condition property="conditionElse"> <equals arg1="${param}" arg2="VALOR2" /> </condition> <antcall target="thenElse"/> <antcall target="elseElse"/> </target>
<target name="thenElse" if="conditionElse"> <echo>El parámetro fue VALOR2</echo> </target>
<target name="elseElse" unless="conditionElse"> <fail message="Parametro desconocido"></fail> </target>
</project>
El tag condition setea una properties de acuerdo a la condición que contiene. Si la condición tiene valor true, el valor de la propertie es seteado en true por default (tambien se puede especificar que valor asignarle a la propertie con el atributo value). De otra manera la propertie no es seteada. Existe un listado de condiciones permitidas para el tag.
Luego utilizando los atributos del tag target : if y unless podemos simular un flujo de condicionales:
- El atributo if permite que se ejecute el target solo si el valor de la variable que se le pasa es true.
- El atributo unless se comporta de la manera contraria: solo permite la ejecución del target si el valor de la variable no es true.
Profiling de las tareas Ant
Nota: Requiere una versión 1.8 o superior.
En caso de que se quiera obtener los tiempo de ejecución de cada tarea ant (clean, report, etc) basta con definir el parámetro logger con el valor org.apache.tools.ant.listener.ProfileLogger. Para más información
Por ejemplo si queremos saber los tiempos para la siguiente tarea:
> ant clean compile test javadoc
con el profiling quedaría:
> ant -logger org.apache.tools.ant.listener.ProfileLogger clean compile test javadoc report
dando como resultado:
...
Target clean: started Tue Dec 14 17:15:40 PKT 2010
...
Target clean: finishedTue Dec 14 17:15:40 PKT 2010 (0ms)
...