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 del año 2000 como reemplazo de la herramienta de compilación Make de Unix . [ 3 ] Es similar a Make, pero está implementada en 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 del código y sus dependencias. [ 4 ]
Ant , publicado bajo la licencia Apache por la Apache Software Foundation , es un proyecto de código abierto .
Historia
Ant ("Otra herramienta útil") [ 5 ] fue concebido por James Duncan Davidson mientras preparaba el motor de referencia JSP y Servlet de Sun Microsystems , posteriormente Apache Tomcat , para su lanzamiento como software de código abierto . Se utilizó una versión propietaria de Make para compilarlo en la plataforma Solaris , pero en el mundo del código abierto no había forma de controlar qué plataforma se usaba para compilar Tomcat; por lo tanto, Ant se creó como una herramienta sencilla e independiente de la plataforma para compilar Tomcat a partir de directivas en un archivo XML de compilación. Ant (versión 1.1) se lanzó oficialmente como producto independiente el 19 de julio de 2000.
Se han hecho 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 dado (2002), Ant era 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 incluían build.xmlarchivos con su distribución. Debido a que Ant hacía trivial la integración de las pruebas JUnit con el proceso de compilación, Ant permitió a los desarrolladores adoptar el desarrollo guiado por pruebas y la programación extrema .
En 2004, Apache creó una nueva herramienta con un propósito similar llamada Maven .
Gradle , un software similar, fue creado en 2008, pero en lugar de XML, utiliza código Groovy (y algunos otros lenguajes).
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 el libdirectorio de Ant. Una vez hecho esto, se pueden invocar directamente en el build.xmlarchivo típico. Las extensiones de WOProject permiten a los desarrolladores de WebObjects usar Ant para crear sus frameworks y aplicaciones, en lugar de usar la suite Xcode de Apple .
Antcontrib[ 10 ] proporciona una colección de tareas como sentencias condicionales y operaciones sobre propiedades, así como otras tareas útiles. [ 11 ] [ 12 ]
Ant-contrib.unkrig.de[ 13 ] implementa tareas y tipos para redes,Swing,procesamientoJSON
Existen otras extensiones de tareas para Perforce , .NET Framework , EJB y manipulación de sistemas de archivos. [ 14 ]
Ejemplo
A continuación se muestra un build.xmlarchivo de ejemplo para una aplicación Java simple "Hola, mundo". Define cuatro objetivos: clean, [ 15 ]clobber , compiley jar, cada uno con una descripción asociada. El jarobjetivo enumera el compileobjetivo como una dependencia. Esto le indica a Ant que antes de poder iniciar el jarobjetivo, primero debe completar el compileobjetivo.
<?xml version="1.0"?> <project name= "Hello" default= "compile" > <target name= "clean" description= "eliminar archivos intermedios" > <delete dir= "classes" /> </target> <target name= "clobber" depends= "clean" description= "eliminar todos los archivos de artefactos" > <delete file= "hello.jar" /> </target> <target name= "compile" description= "compilar el código fuente Java en archivos de clase" > <mkdir dir= "classes" /> <javac srcdir= "." destdir= "classes" /> </target> <target name= "jar" depends= "compile" description= "crea un archivo Jar para la aplicación" > <jar destfile= "hello.jar" > <fileset dir= "classes" includes= "**/*.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 compilarlo; estas se ejecutan mediante tareas integradas. Por ejemplo, para compilar el compile objetivo, Ant primero debe crear un directorio llamado classes(lo cual Ant solo hará si no existe) y luego invocar al compilador de Java. Por lo tanto, las tareas utilizadas son mkdiry javac. Estas realizan una función similar a la de las utilidades de línea de comandos del mismo nombre.
Otra tarea utilizada en este ejemplo se denomina jar:
<jar destfile= "hello.jar" >Esta tarea de Ant tiene el mismo nombre que la utilidad de línea de comandos de Java, JAR, pero en realidad llama a la función integrada de Ant para archivos JAR/ZIP. Este detalle no es relevante para la mayoría de los usuarios finales, quienes simplemente obtienen el archivo JAR que deseaban, con los archivos que solicitaron.
Muchas tareas de Ant delegan su trabajo a programas externos, ya sean nativos o Java. Utilizan las tareas de Ant para configurar las líneas de comando y gestionar todos los detalles del mapeo de la información del archivo de compilación a los argumentos del programa, así como la interpretación del valor de retorno. Los usuarios pueden ver qué tareas realizan esta función (por ejemplo , , , , ) intentando ejecutar la tarea en un sistema sin el programa subyacente en la ruta de acceso o sin un Kit de Desarrollo de Java (JDK) completo instalado.<exec><java><csv><signjar><chmod><rpm>
Portabilidad
Ant está diseñado para funcionar con todos los sistemas para los que existen entornos de ejecución de Java. Se utiliza con mayor frecuencia en 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 portable que Make. [ 4 ] En comparación con Make, Ant utiliza menos comandos de shell específicos de la plataforma . Ant proporciona funcionalidad integrada diseñada para comportarse de la misma manera en todas las plataformas. Por ejemplo, en el build.xmlarchivo de ejemplo anterior, el objetivo clean elimina el classesdirectorio y todo su contenido. 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, usaría:
rmdir /S /Q clases
En un archivo de compilación de Ant, el mismo objetivo se lograría utilizando un comando integrado:
<delete dir= "classes" />Además, Ant no distingue entre la barra inclinada o la barra invertida para los directorios ni entre el punto y coma o los dos puntos para los 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, escritos en XML , pueden ser complejos y extensos, ya que son jerárquicos, parcialmente ordenados y presentan numerosos enlaces cruzados. Esta complejidad puede dificultar el aprendizaje. Los archivos de compilación de proyectos grandes o complejos pueden llegar a ser inmanejables. Un buen diseño y la modularización de los archivos de compilación pueden mejorar su legibilidad, pero no necesariamente reducir su tamaño.
- Muchas de las tareas más antiguas, como y , utilizan valores predeterminados para opciones que no son consistentes con las versiones más recientes de las tareas. Cambiar esos valores predeterminados rompería los scripts Ant existentes.
<javac><exec><java> - Al expandir propiedades en un elemento de cadena o texto, las propiedades no definidas no se generan como un error, sino que se dejan como una referencia sin expandir (por ejemplo
${unassigned.property}). - Ant tiene reglas limitadas para el manejo de fallos.
- La evaluación diferida de propiedades no es compatible. Por ejemplo, al trabajar dentro de un bucle de Antcontrib, no se puede reevaluar una propiedad para un subvalor que pueda formar parte de la iteración. (Algunas extensiones de terceros ofrecen una solución alternativa; los conjuntos de tareas de control de flujo de AntXtras permiten la redefinición del cursor para bucles).
<for> - En los makefiles, cualquier regla para crear un tipo de archivo a partir de otro se puede escribir directamente en el archivo. Por ejemplo, se puede transformar un documento a otro formato mediante reglas que ejecuten otra herramienta. Crear una tarea similar en Ant es más complejo: se debe escribir una tarea aparte en Java e incluirla en el archivo de compilación de Ant para gestionar la misma funcionalidad. Sin embargo, esta separación puede mejorar la legibilidad del script de Ant al ocultar algunos detalles sobre cómo se ejecuta una tarea en diferentes plataformas.
Existen extensiones de terceros para Ant (conocidas como antlibs ) que proporcionan gran parte de la funcionalidad faltante. Además, el entorno de desarrollo integrado (IDE) Eclipse puede compilar y ejecutar scripts de Ant, mientras que el IDE NetBeans utiliza Ant para su sistema de compilación interno. Dado que ambos IDE son plataformas de desarrollo muy populares, pueden simplificar significativamente el uso de Ant. (Como ventaja adicional, los scripts de Ant generados por NetBeans se pueden usar fuera de ese IDE como scripts independientes).
Véase también
- Automatización de compilaciones
- Apache Jelly , una herramienta para convertir XML en código ejecutable.
- Apache Ivy , un gestor de dependencias que se integra estrechamente con Ant, subproyecto de Ant.
- Apache Maven , una herramienta de gestión de proyectos y automatización de compilaciones principalmente para Java.
- NAnt , una herramienta similar a Ant dirigida al entorno .NET Framework en lugar de Java.
- Gradle , una herramienta de compilación de JVM construida con Groovy
Referencias
- ↑ "Noticias del proyecto Apache Ant" . Consultado el 6 de abril de 2026 .
- ↑ "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 .
- 1 2 Moodie 2005 , págs. 5–9, Capítulo §1 Introducción a Ant.
- ↑ "¿Por qué lo llamas Hormiga? – Preguntas frecuentes sobre Apache Ant" .
- ↑ Peter Donald. "Myrmidon: La propuesta de 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 del original el 8 de enero de 2009.
- ↑ "Ant-Contrib" .
- ↑ "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 las hormigas" .
- ↑ Moodie 2005 , págs. 121–125, Capítulo §5 Construyendo un proyecto - Ensamblando el proyecto - Manipulando la ubicación del archivo.
- ↑ Manual de Apache Ant. Sección "Requisitos del sistema" .
Lecturas adicionales
- Loughran, Steve; Hatcher, Erik (12 de julio de 2007). La hormiga en acción (2.ª ed.). Manning Publications . pág. 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). Java Development with Ant (1.ª ed.). Manning Publications . 672 págs . 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ág. 456. ISBN 978-0-672-32562-5.
- Williamson, Alan (1 de noviembre de 2002). Ant – Manual del desarrollador (1.ª ed.). SAMS Publishing . pág. 456. ISBN 978-0-672-32426-0.
- Matzke, Bernd (septiembre de 2003). ANT: La herramienta de compilación de Java en la práctica (1.ª ed.). Charles River Media . 280 págs . ISBN 978-1-58450-248-7.