Apache Ant

llenguatge de programació

Apache Ant és una eina usada en programació per a l'automatització de tasques mecàniques i repetitives, normalment durant la fase de compilació i construcció (build). És similar al make però és escrit en Java i està pensat per usar-lo amb el Java.

Apache Ant
Modifica el valor a Wikidata
Modifica el valor a Wikidata
TipusJava software library (en) Tradueix, automatització de compilació, programari lliure i llenguatge interpretat Modifica el valor a Wikidata
Versió inicialjuliol 2000 i 17 febrer 2006 Modifica el valor a Wikidata
Versió estable
1.10.14 (21 agost 2023) Modifica el valor a Wikidata
LlicènciaLlicència Apache, versió 2.0 Modifica el valor a Wikidata
Característiques tècniques
Sistema operatiumultiplataforma Modifica el valor a Wikidata
PlataformaMàquina Virtual Java Modifica el valor a Wikidata
Escrit enJava Modifica el valor a Wikidata
Format de fitxer d'escriptura
Equip
Desenvolupador(s)Apache Software Foundation Modifica el valor a Wikidata
Més informació
Lloc webant.apache.org (anglès) Modifica el valor a Wikidata
Stack ExchangeEtiqueta Modifica el valor a Wikidata
Seguiment d'errorsSeguiment d'errors Modifica el valor a Wikidata
Free Software DirectoryApache_Ant Modifica el valor a Wikidata

La diferència més notable entre Ant i make, és que Ant utilitza un fitxer en format XML per descriure el procés de construcció (build) i les seves dependències. Mentre que el make té el seu propi format Makefile. Per defecte el fitxer XML és anomenat build.xml.

Ant és un projecte de codi obert de l'Apache Software Foundation, distribuït sota la llicència Apache.

Fitxer d'exemple build.xml modifica

A continuació es mostra un fitxer d'exemple (build.xml) per a una aplicació "Hola món" en Java. El fitxer defineix tres objectius (targets) - clean, compile i jar, cadascun dels quals té una descripció associada. L'objectiu jar llista l'objectiu compile com a dependència. Això li diu a Ant que, abans de començar l'objectiu jar, ha de completar l'objectiu compile.

Dintre de cada objectiu hi han les accions que ha de prendre Ant per a construir l'objectiu. Per exemple, per a construir l'objectiu compile, Ant primer ha de crear un directori anomenat classes (Ant només ho farà si aquest no existeix prèviament) i després cridar al compilador de Java.

<?xml version="1.0"?>
<project name="Hello" default="compile">
 <target name="clean" description="remove intermediate files">
 <delete dir="classes"/>
 </target>
 <target name="clobber" depends="clean" description="remove all artifact files">
 <delete file="hello.jar"/>
 </target>
 <target name="compile" description="compile the Java source code to class files">
 <mkdir dir="classes"/>
 <javac srcdir="." destdir="classes"/>
 </target>
 <target name="jar" depends="compile" description="create a Jar file for the application">
 <jar destfile="hello.jar">
 <fileset dir="classes" includes="**/*.class"/>
 <manifest>
 <attribute name="Main-Class" value="HelloProgram"/>
 </manifest>
 </jar>
 </target>
</project>

Portabilitat modifica

Un dels primers objectius d'Ant va ser solucionar els problemes de portabilitat de Make. En un Makefile les accions necessàries per a crear un objectiu s'especifiquen com ordres d'intèrpret de comandes que són específics de la plataforma, normalment un shell d'Unix. Ant resol aquest problema proveint una gran quantitat de funcionalitats per ell mateix, que poden garantir que romandran (gairebé) idèntiques en totes les plataformes.

Per exemple, en l'exemple build.xml anterior, l'objectiu (target) clean esborra el directori classes i tot el seu contingut. En un Makefile això normalment es faria amb l'ordre:

rm -rf classes/

rm és una ordre específica de Unix que probablement no estarà disponible si el Makefile s'utilitza en un entorn no Unix com Microsoft Windows. En un fitxer de construcció Ant es pot aconseguir el mateix utilitzant una ordre pròpia:

<delete dir="classes"/>

Una discrepància comuna entre diferents plataformes és la manera que les rutes de directoris s'especifiquen. Unix usa la barra (/) per a delimitar els components d'una ruta, mentre que Windows utilitza la barra invertida (\). Els fitxers de Ant permeten a l'autor triar la seva convenció favorita, barres o barres invertides per a directoris, comas o punt i coma per a separar rutes. Ant ho converteix tot al format apropiat per a la plataforma utilitzada.

Història modifica

Ant va ser creat per James Duncan Davidson mentre realitzava la transformació d'un projecte de Sun Microsystems en codi obert (concretament la implementació de Servlets i JSP de Sun que després es diria Apache Tomcat). En un entorn tancat Make funcionava correctament sota la plataforma Solaris, però per a l'entorn de codi obert, on no era possible determinar la plataforma sota la qual s'anava a compilar, era necessària una altra forma de treballar. Així va néixer Ant com un simple intèrpret que agafava un arxiu XML per a compilar Tomcat independentment de la plataforma sobre la qual operava. A partir d'aquest punt l'eina va anar adoptant noves funcionalitats i actualment és un estàndard en el món Java.

Limitacions modifica

  • Els fitxers Ant han de ser escrits en XML. Això no és només una barrera per als nous usuaris, sinó també un problema en els projectes molt grans, quan es construïxen fitxers molt grans i complexos. Això potser és un problema comú a tots els llenguatges XML, però la granularitat de les tasques de Ant (comparat amb Maven, per citar-ne algun), significa que els problemes d'escalabilitat arriben aviat.
  • La majoria de les antigues eines —les quals s'usen tots els dies, com <javac>, <exec> i <java>— tenen configuracions dolentes per defecte, valors per a opcions que no són coherents amb les tasques més recents. Canviar aquests valors suposa espatllar les eines existents.
  • Quan s'expandeixen les propietats en una cadena o un element de text, les propietats no definides no són plantejades com error, sinó que es deixen com una referència sense expandir (ex.: ${unassigned.property}).
  • No és un llenguatge per a un flux de treball general, i no hauria de ser utilitzat com a tal. En particular, té regles de control d'errors limitades, i no té persistència d'estat, de manera que no pot ser utilitzat amb confiança per a manejar una construcció de diversos dies.

Enllaços externs modifica