Apache Ant es una herramienta de software para automatizar los procesos de compilación de software para aplicaciones Java [2] que se originó a partir del proyecto Apache Tomcat a principios de 2000 como reemplazo de la herramienta de compilación Make de Unix . [3] Es similar a Make, pero se implementa utilizando el lenguaje Java y requiere la plataforma Java. A diferencia de Make, que utiliza el formato Makefile , Ant utiliza XML para describir el proceso de compilación de código y sus dependencias. [4]
Publicado bajo una licencia Apache por la Apache Software Foundation , Ant es un proyecto de código abierto .
Historia
Ant ("Another Neat Tool") [5] fue concebido por James Duncan Davidson mientras preparaba el motor de Servlet y JSP de referencia de Sun Microsystems , más tarde Apache Tomcat , para su lanzamiento como código abierto . Se utilizó una versión propietaria de Make para construirlo en la plataforma Solaris , pero en el mundo del código abierto no había forma de controlar qué plataforma se utilizaba para construir Tomcat; por lo que Ant fue creado como una herramienta simple e independiente de la plataforma para construir Tomcat a partir de directivas en un "archivo de construcción" XML. Ant (versión 1.1) fue lanzado oficialmente como un producto independiente el 19 de julio de 2000.
Se han realizado varias propuestas para una versión 2 de Ant, como AntEater de James Duncan Davidson, Myrmidon de Peter Donald [6] y Mutant de Conor MacNeill, ninguna de las cuales logró una gran aceptación entre la comunidad de desarrolladores. [7]
En un momento (2002), Ant fue la herramienta de compilación utilizada por la mayoría de los proyectos de desarrollo de Java. [8] Por ejemplo, la mayoría de los desarrolladores de Java de código abierto incluyeron build.xmlarchivos con su distribución. [ cita requerida ] Debido a que Ant hizo que fuera trivial integrar las pruebas JUnit con el proceso de compilación, Ant permitió a los desarrolladores adoptar el desarrollo basado en pruebas y la programación extrema .
En 2004, Apache creó una nueva herramienta con un propósito similar llamada Maven .
Gradle , que es un software similar, fue creado en 2008, pero utiliza código Groovy (y algunos otros lenguajes) en lugar de XML.
Extensiones
WOProject-Ant [9] es solo uno de los muchos ejemplos de extensiones de tareas escritas para Ant. Estas extensiones se instalan copiando sus .jararchivos en libel directorio de Ant. Una vez hecho esto, estas extensiones de tareas se pueden invocar directamente en el build.xmlarchivo típico. Las extensiones WOProject permiten a los desarrolladores de WebObjects utilizar Ant para crear sus marcos y aplicaciones, en lugar de utilizar la suite Xcode de Apple .
Antcontrib[10] proporciona una colección de tareas tales como declaraciones condicionales y operaciones sobre propiedades, así como otras tareas útiles. [11] [12]
Ant-contrib.unkrig.de[13] implementa tareas y tipos para redes, interfaces de usuario Swing , procesamiento JSON y otros.
Existen otras extensiones de tareas para Perforce , .NET Framework , EJB y manipulaciones del sistema de archivos. [14]
Ejemplo
A continuación se muestra un build.xmlarchivo de muestra para una aplicación Java sencilla del tipo "Hola, mundo". Define cuatro objetivos: clean, [15] y clobber, cada uno de los cuales tiene una descripción asociada. El objetivo indica el objetivo como una dependencia. Esto le indica a Ant que antes de poder iniciar el objetivo, primero debe completarlo .
compilejarjarcompilejarcompile
<?xml version="1.0"?>
<project name= "Hello" default= "compilar" > <target name= "limpiar" description= "eliminar archivos intermedios" > <delete dir= "clases" /> </target> <target name= "clobber" dependents= "limpiar" description= "eliminar todos los archivos de artefactos" > <delete file= "hello.jar" /> </target> <target name= "compilar" description= "compilar el código fuente de Java en archivos de clase" > <mkdir dir= "clases" /> <javac srcdir= "." destdir= "classes" /> </target> <target name= "jar" dependent= "compilar" description= "crear un archivo Jar para la aplicación" > <jar destfile= "hello.jar" > <fileset dir= "classes" included= "**/*.class" /> <manifest> <attribute name= "Main-Class" value= "HelloProgram" /> </manifest> </jar> </target> </project>
Dentro de cada objetivo se encuentran las acciones que Ant debe realizar para construir dicho objetivo; estas se realizan mediante tareas integradas. Por ejemplo, para construir el compile objetivo, Ant primero debe crear un directorio llamado classes(lo que Ant hará solo si no existe ya) y luego invocar el compilador de Java. Por lo tanto, las tareas utilizadas son mkdiry javac. Estas realizan una tarea similar a las utilidades de línea de comandos del mismo nombre.
Otra tarea utilizada en este ejemplo se denomina jar:
<jar destfile= "hola.jar" >
Esta tarea de Ant tiene el mismo nombre que la utilidad de línea de comandos de Java, JAR, pero en realidad es una llamada al soporte de archivos JAR/ZIP integrado del programa Ant. Este detalle no es relevante para la mayoría de los usuarios finales, que simplemente obtienen el JAR que querían, con los archivos que pidieron.
Muchas tareas de Ant delegan su trabajo a programas externos, ya sean nativos o Java. Utilizan las tareas <exec>y de Ant <java>para configurar las líneas de comandos y manejar todos los detalles de la asignación de la información en el archivo de compilación a los argumentos del programa e interpretar el valor de retorno. Los usuarios pueden ver qué tareas hacen esto (por ejemplo <csv>, <signjar>, <chmod>, <rpm>), al intentar ejecutar la tarea en un sistema sin el programa subyacente en la ruta o sin un Kit de desarrollo de Java (JDK) completo instalado.
Portabilidad
Ant está diseñado para funcionar con todos los sistemas para los que hay entornos de ejecución de Java disponibles. Se utiliza con mayor frecuencia con Windows , Linux , macOS y otros sistemas operativos Unix , pero también se ha utilizado en otras plataformas como OS/2, OpenVMS, Solaris y HP-UX. [16]
Ant fue diseñado para ser más portátil que Make. [4] En comparación con Make, Ant utiliza menos comandos de shell específicos de la plataforma . Ant proporciona una funcionalidad integrada que está diseñada para comportarse de la misma manera en todas las plataformas. Por ejemplo, en el build.xmlarchivo de ejemplo anterior, el objetivo cleanclasses elimina el directorio y todo lo que contiene. En un Makefile, esto normalmente se haría con el comando:
rm -rf clases/
rmes un comando específico de Unix que no está disponible en otros entornos. Microsoft Windows , por ejemplo, utilizaría:
rmdir /S /Q clases
En un archivo de compilación Ant, se lograría el mismo objetivo utilizando un comando integrado:
<eliminar dir= "clases" />
Además, Ant no distingue entre barra diagonal o barra invertida para directorios y punto y coma o dos puntos para separadores de ruta. Convierte cada uno al símbolo apropiado para la plataforma en la que se ejecuta.
Limitaciones
- Los archivos de compilación de Ant, que se escriben en XML , pueden ser complejos y detallados, ya que son jerárquicos, están parcialmente ordenados y tienen vínculos cruzados generalizados. Esta complejidad puede ser una barrera para el aprendizaje. Los archivos de compilación de proyectos grandes o complejos pueden llegar a ser inmanejables. Un buen diseño y modularización de los archivos de compilación puede mejorar la legibilidad, pero no necesariamente reducir el tamaño.
- Muchas de las tareas más antiguas, como
<javac>,<exec>y<java>— utilizan valores predeterminados para las opciones que no son coherentes con las versiones más recientes de las tareas. Cambiar esos valores predeterminados podría dañar los scripts Ant existentes. - Al expandir propiedades en una cadena o un elemento de texto, las propiedades no definidas no se generan como un error, sino que se dejan como una referencia no expandida (por ejemplo,
${unassigned.property}). - Ant tiene reglas limitadas de manejo de fallas.
- No se admite la evaluación diferida de propiedades . Por ejemplo, cuando se trabaja dentro de un
<for>bucle Antcontrib, no se puede volver a evaluar una propiedad para un subvalor que puede ser parte de la iteración. (Algunas extensiones de terceros facilitan una solución alternativa; los conjuntos de tareas de control de flujo de AntXtras permiten la redefinición del cursor para los bucles). - En los archivos make, cualquier regla para crear un tipo de archivo a partir de otro se puede escribir en línea dentro del archivo make. Por ejemplo, se puede transformar un documento a otro formato utilizando reglas para ejecutar otra herramienta. Crear una tarea similar en Ant es más complejo: se debe escribir una tarea separada en Java e incluirla con el archivo de compilación de Ant para manejar el mismo tipo de funcionalidad. Sin embargo, esta separación puede mejorar la legibilidad del script de Ant al ocultar algunos de los detalles de cómo se ejecuta una tarea en diferentes plataformas.
Existen extensiones de Ant de terceros (llamadas antlibs ) que proporcionan gran parte de la funcionalidad faltante. Además, el entorno de desarrollo integrado (IDE) de Eclipse puede crear y ejecutar scripts de Ant, mientras que el IDE de NetBeans utiliza Ant para su sistema de creación interno. Como ambos IDE son plataformas de desarrollo muy populares, pueden simplificar significativamente el uso de Ant. (Como beneficio adicional, los scripts de Ant generados por NetBeans se pueden utilizar fuera de ese IDE como scripts independientes).
Véase también
- Automatización de la construcción
- Apache Jelly , una herramienta para convertir XML en código ejecutable
- Apache Ivy , un administrador de dependencias que se integra estrechamente con Ant, subproyecto de Ant
- Apache Maven , una herramienta de gestión de proyectos y automatización de compilación principalmente para Java
- NAnt , una herramienta similar a Ant orientada al entorno .NET Framework en lugar de Java
- Gradle , una herramienta de compilación de JVM creada con Groovy
Referencias
- ^ "Noticias del proyecto Apache Ant" . Consultado el 30 de agosto de 2023 .
- ^ "Apache Ant - Bienvenido". ant.apache.org . Consultado el 25 de enero de 2022 .
- ^ "Apache Ant - Preguntas frecuentes". ant.apache.org . Consultado el 25 de enero de 2022 .
- ^ ab Moodie 2005, pp. 5–9, Capítulo §1 Introducción a Ant.
- ^ "¿Por qué lo llamas Ant? – Preguntas frecuentes sobre Apache Ant".
- ^ Peter Donald. "Myrmidon: La propuesta Ant2.0".
- ^ MacNeill, Conor (4 de agosto de 2005). "La historia temprana del desarrollo de las hormigas".
- ^ Wiley (2002). Herramientas Java para programación extrema . pág. 76.
- ^ "WOProject-Ant – WOProject / WOLips – Confluence". Archivado desde el original el 8 de enero de 2009.
- ^ "Contribución de hormigas".
- ^ "Tareas de Ant-Contrib".
- ^ Moodie 2005, págs. 266–267, Capítulo §10 Escritura de tareas personalizadas: uso de tareas personalizadas de terceros.
- ^ "ant-contrib.unkrig.de".
- ^ "Descripción general de las tareas de Ant".
- ^ Moodie 2005, págs. 121–125, Capítulo §5 Creación de un proyecto - Ensamblaje del proyecto - Manipulación de la ubicación del archivo.
- ^ Manual de Apache Ant. Sección "Requisitos del sistema".
Lectura adicional
- Loughran, Steve; Hatcher, Erik (12 de julio de 2007). Ant in Action (2.ª ed.). Manning Publications . p. 600. ISBN 978-1-932394-80-1.
- Holzner, Steven (13 de abril de 2005). Ant: la guía definitiva (2ª ed.). Medios O'Reilly . pag. 334.ISBN 978-0-596-00609-9.
- Moodie, Matthew (2005). Pro Apache Ant (1.ª ed.). Apress . ISBN 1-59059-559-9.
- Bell, Alexis T. (7 de julio de 2005). ANT Java Notes: An Accelerated Intro Guide to the Java ANT Build Tool (1.ª ed.). Virtualbookworm.com Publishing. pág. 268. ISBN 978-1-58939-738-5.
- Hatcher, Erik; Loughran, Steve (agosto de 2002). Desarrollo de Java con Ant (1.ª ed.). Manning Publications . pp. 672. ISBN 978-1-930110-58-8.
- Niemeyer, Glenn; Poteet, Jeremy (29 de mayo de 2003). Programación extrema con Ant: creación e implementación de aplicaciones Java con JSP, EJB, XSLT, XDoclet y JUnit (1.ª ed.). SAMS Publishing . p. 456. ISBN 978-0-672-32562-5.
- Williamson, Alan (1 de noviembre de 2002). Ant – Developer's Handbook (1.ª ed.). SAMS Publishing . p. 456. ISBN 978-0-672-32426-0.
- Matzke, Bernd (septiembre de 2003). ANT: The Java Build Tool In Practice (1.ª ed.). Charles River Media. pp. 280. ISBN 978-1-58450-248-7.
Enlaces externos
- Sitio web oficial