Ant è un tool per la compilazione di applicazioni Java. Potete pensare ad Ant per Java come all'equivalente di make per i programmi scritti in C/C++.
Grazie ad Ant possiamo automatizzare le operazioni di compilazione, test, pacchetizzazione, distribuzione e deploy dei nostri applicativi.
Installazione (sotto Linux)
Scaricate l'ultima versione di Ant dall'url http://ant.apache.org/
Scompattate il file scaricato e spostate la cartella di Ant ad esempio sotto /opt/ant
impostate le variabili di ambiente necessarie:
export ANT_HOME=/opt/ant export PATH=$PATH:/$ANT_HOME/bin
(potreste anche inserire queste due righe nel file /etc/profile , in modo che vengano eseguite ad ogni vostro login)
Sotto Windows potete procedere in maniera analoga, magari estraendo Ant nella cartella \Programmi\ant ; le variabili di ambiente vanno invece impostate dal pannello di controllo.
Panoramica
Per utilizzare ant è necessario scrivere un buildfile che tipicamente chiameremo build.xml . Esso ha la seguente struttura:
<project name="nomeProgetto" default="target1"> <description> Descrizione progetto </description> <target name="target1"> <task1>...</task1> <task2>...</task2> ...etc... </target> <target name="target2"> <task1>...</task1> <task2>...</task2> ...etc... </target> ...etc... </project>
Come vedete un buildfile è composto da una serie di "target" e di "task". Ogni target è una operazione che si vuole compiere, mentre ogni task è una istruzione da eseguire; quindi tipicamente avremo un target per compilare l'applicativo, uno per creare un file JAR, etc.. e per ogni target daremo istruzioni ad Ant su cosa fare, indicando una sequenza di task.
Un primo esempio
Supponiamo di avere il nostro progetto Java con la seguente struttura:
progetto |-- src |-- lib \-- build.xml
Nella cartella 'src' ci sono i sorgenti, nella cartella 'lib' tutte le librerie di terze parti che utilizziamo (es, Spring, Hibernate, Struts, log4j, altro..) e il nostro buildfile di nome build.xml
Creiamo un buildfile con i seguenti target:
<project name="test" default="build"> <description> Progetto di test </description> <target name="build"> <mkdir dir="work"/> <mkdir dir="work/build"/> <javac srcdir="src" destdir="work/build" extdirs="lib"/> </target> <target name="dist" depends="build"> <jar basedir="work/build" destfile="work/applicazione.jar"/> </target> <target name="clean"> <delete dir="work"/> </target> </project>
Da notare che:
Da linea di comando ci basterà eseguire:
Un esempio un po' più complesso
Introduciamo nel buildfile precedente l'utilizzo di variabili ("property" nella terminologia ant) e di istruzioni condizionali. Facciamo in modo che sia possibile compilare il nostro software con o senza informazioni di debug, e che sia possible anche indicare la versione di virtual machine che vogliamo usare (1.6 oppure 1,5 etc..). Inoltre modifichiamo il target "build" in modo che, opzionalmente, prima venga effettuato il "clean" (cioè la rimozione dei files temporanei).
Per fare ottenere questo introduciamo tre properties: debuginfo (default true), vm (default 1.6)
Ecco il nuovo buildfile (ho evidenziato in grassetto le modifiche rispetto al precedente):
<project name="test" default="build"> <description> Esempio con IF e PROPERTIES </description> <property name="vm" value="1.6"/> <property name="debuginfo" value="true"/> <target name="build" depends="clean"> <mkdir dir="work"/> <mkdir dir="work/build"/> <javac srcdir="src" destdir="work/build" extdirs="lib" target="${vm}" debug="${debuginfo}"/> </target> <target name="dist" depends="build"> <jar basedir="work/build" destfile="work/applicazione.jar"/> </target> <target name="clean" if="clean"> <delete dir="work"/> </target> </project>
Dall'esempio si vede come ci si riferisce alle properties, cioè con la sintassi ${nomeProperty}
L'IF presente nel target clean merita una nota più approfondita; if="clean" significa: "esegui il target soltanto è stata definita una property di nome clean". Quindi in pratica "build" dipende da "clean", ma "clean" verrà eseguito soltanto nel caso in cui sia stata definita la propery "clean". Il fatto che ho chiamato il target "clean" con lo stesso nome della property "clean" è solo un caso.
Questo nuovo buildfile lo utilizzeremo in questa maniera:
Alcuni altri task predefini di Ant
Ant prevedere numerosi task predefiniti, e molti altri è possibile installarli come plugin (primi tra tutti segnalo quelli per Tomcat, per la compilazione di file Groovy, e per l'accesso a repository subversion).
Tra quelli predefiniti eccone alcuni
per degli esempi di utilizzo consultare il manuale di Ant.
Maggiori informazioni
In questo articolo abbiamo coperto solo una piccola parte delle potenzialità di Ant.
Per maggiori informazioni la migliore fonte è la documentazione ufficiale che trovate all'indirizzo: http://ant.apache.org/manual/
Alternative ad Ant
Esistono diversi altri tool con i quali effettuare la compilazione (e tante altre cose) alternativi ad Ant. Tra questi vi menziono: