Ant aporta la portabilidad y flexibilidad de Java puro a las opciones clave de herramientas de compilación
Herramientas de compilación
En cualquier gran proyecto de ingeniería de software, las herramientas de compilación son una de las partes más importantes del conjunto de herramientas de un desarrollador. Sin herramientas de compilación confiables, el proceso de compilación, empaquetado y distribución puede abrumar a la programación real en complejidad y requisitos de tiempo.
Las opciones de herramientas de compilación para los desarrolladores de Java se limitan en gran medida a las herramientas antiguas basadas en UNIX, como Make. Make y sus derivados de código abierto pueden hacer el trabajo, pero usarlos a menudo depende de llamar a los comandos de UNIX o Windows para hacer el trabajo pesado. Esto significa que, aunque el código Java es multiplataforma y se escribe una vez y se ejecuta en cualquier lugar, los sistemas de compilación generalmente están vinculados a una plataforma.
Los desarrolladores de Java analizaron este problema y se dieron cuenta de que, al aprovechar la plataforma Java, podían crear una herramienta de compilación más poderosa diseñada para programadores de Java y no vinculada a ninguna plataforma en particular. El resultado es Ant, un proyecto gestionado por el proyecto Jakarta de la Fundación Apache.
Los archivos de configuración de Ant se escriben como documentos XML, por lo que los programadores de Java ya deberían estar familiarizados con la sintaxis del archivo, en contraste con la sintaxis Make notoriamente hostil. Además, todas las acciones (llamadas tareas) que realiza un sistema de compilación para crear un proyecto están escritas en Java; el mismo archivo de compilación se ejecutará siempre que haya un compilador de Java disponible. Todo en Ant es autónomo.
En este artículo, veremos cómo configurar e instalar Ant, crear archivos de configuración para construir su proyecto y usar el sistema integrado disponible y las tareas condicionales.
Configurar e instalar Ant
Para comenzar, debemos ir a la página de inicio de Ant, que contiene la última versión, el manual en línea y las preguntas frecuentes. Antes de descargar e instalar Ant, debe tener el kit de desarrollo de Java (1.2 o superior), la variable de entorno JAVA_HOME configurada y el compilador javac en su ruta ejecutable.
Puede descargar ANT precompilado desde el sitio de Jakarta. También seleccionará un archivo Java Archive (JAR) opcional, que incluye tareas que facilitan la integración con otras herramientas de desarrollo. Ant también es un software de código abierto, por lo que si desea cambiar algún elemento interno para adaptarse a su entorno de construcción, puede hacerlo. Solo necesitas descargar el código fuente. Sin embargo, tenga en cuenta que Ant es muy flexible y, como veremos en el próximo artículo, agregar funcionalidad a Ant es fácil y no requiere cambios en el código fuente de Ant.
Después de descargar el paquete binario, simplemente descomprima el archivo en la ubicación donde desea instalar Ant. En el sistema Windows, descomprima en c:\ant\; en el sistema UNIX, puede instalarlo en /usr/local/ant/ o /opt/ant/.
A continuación, debe configurar las variables de entorno, específicamente ANT_HOME. En Windows, suponiendo que lo instalamos en c:\ant, el comando que se muestra en la Figura A establecerá correctamente las variables de entorno.
Figura A |
Establecer variables de entorno de Windows. |
En UNIX, suponiendo que instalamos en /usr/local/ant, los comandos que se muestran en la Figura B establecerán correctamente las variables de entorno.
Figura B |
Establecer variables de entorno UNIX. |
Para instalar tareas opcionales en sistemas Windows o UNIX, debe copiar los archivos jar opcionales en el directorio $ANT_HOME/lib/. El script ant o ant.bat agrega automáticamente el archivo jar al classpath.
Ahora, probemos para asegurarnos de que Ant esté instalado correctamente. En la línea de comando, escriba hormiga. Debería ver un mensaje, como se muestra en la Figura C, que indica que Ant no puede encontrar el archivo Build.xml. Esto es de esperar ya que tuvimos que configurar y crear el archivo del proyecto.
Figura C |
mensaje de error del archivo de compilación |
Ahora que Ant está listo para leer el archivo del proyecto, veamos cómo se ve el archivo del proyecto.
crear proyecto
Para facilitar la vida de los desarrolladores, los archivos de configuración de Ant se escriben como documentos XML. Los desarrolladores no tienen que preocuparse por los problemas de espacios en blanco (como Makefiles), y muchos desarrolladores ya son buenos para escribir XML válido.
Al iniciar, Ant intentará cargar automáticamente un archivo de configuración del proyecto llamado Build.xml. Si desea nombrar la configuración de su proyecto con algo diferente, puede ejecutar ant con el indicador –buildfile de la siguiente manera:
ant -buildfile Proyecto_configuración.xml
En el archivo de configuración de muestra SimpleBuild.xml que se muestra en el Listado A, verá una etiqueta de proyecto con tres atributos: nombre, valor predeterminado y dirección base. Cada indicador en el archivo de configuración de Ant está muy bien documentado en el manual de Ant. Deberá usar el manual de Ant como referencia para ver qué banderas son obligatorias, cuáles son opcionales y cuáles tienen valores predeterminados.
En la pestaña del proyecto, verá las pestañas de propiedades y destino. Las etiquetas de propiedad crean variables a las que se puede acceder mediante tareas y extensiones de variables. Como veremos más adelante, algunas variables (como la fecha y la hora) se pueden configurar dentro de una tarea, por lo que no todas las variables se definirán explícitamente.
Después de la pestaña Atributos, verá la pestaña Objetivos. Puede definir varios objetivos, cada uno con un nombre diferente. Notará que el nombre de la etiqueta de destino es compilar, lo que corresponde al valor predeterminado en la etiqueta del proyecto. Es decir, cuando ejecutamos Ant, automáticamente iniciará el objetivo de compilación.
Hay una serie de tareas en un destino, que Ant ejecuta secuencialmente. Descubrirá que casi cualquier cosa que desee hacer en el proceso de compilación, empaque y distribución se puede manejar con las tareas que vienen con Ant.
En nuestra compilación simple, usamos la tarea tstamp para establecer la fecha y la hora actuales en una variable de entorno. A continuación, usaremos la tarea mkdir para crear un directorio llamado ${build}. (Suponiendo que no exista. Este es el primer ejemplo de expansión de shell en nuestro script. Ant expandirá automáticamente «${build}» al valor establecido por la construcción de propiedad, en este caso, la construcción de cadena).
Finalmente, usaremos la tarea javac para compilar el código fuente del directorio src y guardar el resultado en build.gradle.
Cuando ejecutamos Ant, obtenemos un resultado que muestra el estado de ejecución de cada objetivo, como se muestra en la Figura D.
Figura D |
salida de hormiga |
Un ejemplo más profundo
Ahora veamos una configuración un poco más compleja que usa múltiples objetivos para construir.
En el ejemplo Medium.xml, como se muestra en el Listado B, la configuración se divide en más objetivos que en nuestro ejemplo SimpleBuild.xml. Dividir el proceso de compilación en diferentes objetivos significa que Ant puede ingresar al proceso de compilación en cualquier momento. En SimpleBuild.xml, simplemente compilamos el código fuente de Java. En este ejemplo, sin embargo, inicializamos el entorno (init), compilamos el código (compile), empaquetamos el código en un contenedor (paquete) y copiamos el resultado en nuestra ubicación de producción (dist). También tenemos la tarea de limpiar el entorno volviendo a antes de compilar cualquier código.
De manera predeterminada, ejecutaremos init, compile, package y dist en ese orden. Puedes ver que cada destino tiene una dependencia definida, Ant completa las dependencias antes que los destinos que dependen de ellos. El objetivo predeterminado es dist, por lo que ejecutar ant en la línea de comando hará todo.
Sin embargo, podemos realizar algunos pasos especificando el objetivo deseado en la línea de comando. Por ejemplo, solo podemos empaquetar el código, no distribuirlo. Dividir proyectos más grandes en múltiples objetivos ayudará al proceso de depuración y control de calidad, ya que permite a los desarrolladores crear rápidamente subsecciones en lugar de esperar a una compilación completa.
tareas integradas
Ahora que comprende cómo crear archivos de proyecto, veamos algunas tareas integradas. Querrá consultar la documentación de Ant para obtener detalles sobre las tareas, ya que hay mucha más información de la que podemos cubrir aquí.
tareas del sistema de archivos
Probablemente utilice Ant con mayor frecuencia para realizar tareas del sistema: mover, modificar, copiar y eliminar archivos. Al distribuir y limpiar archivos temporales, debe mover los archivos. Es por eso que una buena comprensión de las herramientas del sistema de archivos es esencial.
Nuestro ejemplo Fs.xml, que se muestra en el Listado C, envía un mensaje al sistema de archivos. Los nombres «@…@» son la forma en que Ant hace la sustitución de texto. Debe especificar qué etiquetas reemplazar colocando signos «@» alrededor del texto que desea reemplazar. Después de copiar los mensajes en el disco, creamos dos directorios, copiamos los archivos, marcamos reemplazar los archivos en el disco durante la copia y eliminamos uno de los archivos copiados. La Figura E muestra el resultado de ejecutar Ant en el archivo de compilación Fs.xml.
Figura E |
Salida del ejemplo del sistema de archivos |
Condiciones de Uso
Las condiciones de construcción en Ant no son fáciles. Debido a la forma en que Ant crea tareas y objetivos, debe crear sus declaraciones con cuidado. Una declaración condicional ejecuta un objetivo solo si la propiedad se establece en verdadero. Puede construir condiciones utilizando declaraciones and, or y not. Puede usar la tarea antcall para ejecutar otro objetivo cuando se determina que la condición es verdadera. Veamos un ejemplo simple que determina si una tarea de sonido opcional está disponible y si está disponible en UNIX o Windows.
En el ejemplo de SoundConditional que se muestra en el Listado D, puede ver que la tarea de condición llamará a dos declaraciones de condición, condWinSound y condUnixSound, pero ninguna se ejecutará a menos que se establezca la propiedad de condición. El objetivo condicional comprueba si el paquete está disponible (es parte del archivo jar opcional) y en qué plataforma está disponible.
para resumir
A estas alturas, debería estar listo para comenzar a mover sus propios proyectos de software a la herramienta de compilación Ant. Los desarrolladores utilizan cada vez más Ant para respaldar grandes proyectos de Java, y por una buena razón. Estas herramientas están orientadas a Java, son multiplataforma y, en general, son más fáciles de usar que las herramientas orientadas a UNIX. Espero que este artículo le haya presentado el poder de Ant y le haya ayudado a aumentar la productividad de su organización. En futuros artículos, veremos cómo extender Ant creando sus propias tareas.