Ant è una libreria JAVA sviluppata dalla Apache che permette di automatizzare il processo di sviluppo di applicazioni Java. Con Ant, infatti, è possibile creare un progetto che compila, genera la documentazione, realizza file jar, war ed ear ed effettua il deploy di un'applicazione web su un application server, tutto con il semplice lancio di un comando.
La versione corrente di Apache Ant è la 1.7. Per utilizzare Ant bisogna settare le seguenti variabili di ambiente:
ANT_HOME
contenente il path della root di Ant;JAVA_HOME
contenente il path della root del JDK.
È consigliato, inoltre, aggiungere alla variabile di ambiente PATH la cartella bin di Ant e la directory bin della JDK in modo da poter richiamare il programma da qualsiasi directory.
- Su una macchina Linux:
- export ANT_HOME=/usr/local/ant-1.7
- export JAVA_HOME=/usr/local/jdk-1.6.0
- export PATH=${PATH}:${ANT_HOME}/bin:${JAVA_HOME}/bin
- Su una macchina Windows:
- set ANT_HOME=C:ant-1.7
- set JAVA_HOME=C:jdk1.6.0
- set PATH=%PATH%;%ANT_HOME%bin;%JAVA_HOME%bin
Ant è un programma che si lancia da riga di comando. I comandi che Ant esegue sono letti da un file XML, di solito chiamato build.xml. In questo file bisogna definire le operazioni (target) disponibili e, per ciascuna di esse, i comandi da eseguire (task).
Il file build.xml è composto da un tag <project>
che contiene a sua volta tutti i comandi disponibili, denominati target.
Ciascun target può avere target dipendenti, ciò vuol dire che, se viene richiesta l'esecuzione di un target, Ant eseguirà prima i suoi target dipendenti.
Analizziamo i comandi principali (task) che Ant mette a disposizione:
<echo>
: permette di scrivere un messaggio sulla console; esempio:<echo message="Questo è in nostro primo progetto Ant"/>
;<property>
: permette di definire una o più property. È possibile anche definire le property in un file esterno. Le Properties sono case sensitive ed immutabili: chiunque setti per primo il valore per la property la congela per la restante esecuzione dello script. Le property saranno poi visibili all'interno del file build.xml utilizzando la seguente sintassi:${nomeVar}
;<jar>
: permette di creare un file jar. È necessario definire il nome del file jar da creare e la directory contenente i file class. È possibile definire eventualmente sia necessario anche le directory o i file da escludere;<war>
: permette di creare un file war. È possibile definire i file che andranno nella root (fileset), le librerie e i file classes che andranno nella directory WEB-INF.<javac>
: permette di compilare i file java. Ant scandisce ricorsivamente la directory specificata nel parametro srcdir alla ricerca di file java per i quali il relativo file .class non è presente o è meno recente del sorgente. Con questo controllo viene evitato di compilare i file già compilati che non hanno subito modifiche rispetto all'ultima compilazione.
Come esempio scriveremo un semplice file build.xml che permette di compilare un nostro web project e fare il deploy dell'applicazione sul web server Tomcat.
Listato 1. Compila un'applicazione web e fa il deploy su Tomcat
<project name="Ant_Project" basedir="." default="info">
<target name="info">
<echo message="Esempio Script Ant by Html.it" />
<echo message="autore Luca Santaniello - email: luca.santaniello@email.it" />
</target>
<target name="init" depends="info">
<property name="tomcat.home" value="C:ToolsTomcat_6.0.13" />
</target>
<target name="compila" depends="init">
<echo message="Compilazione del progetto" />
<mkdir dir="WEB-INFclasses" />
<javac srcdir="src" classpath="${tomcat.home}libservlet-api.jar" destdir="WEB-INFclasses" />
</target>
<target name="war" depends="compila">
<echo message="Creazione WAR" />
<delete file="webApp.war" />
<war destfile="webApp.war" webxml="WEB-INFweb.xml">
<fileset dir="." excludes="build.xml"></fileset>
</war>
</target>
<target name="deploy" depends="war">
<copy file="webApp.war" todir="${tomcat.home}webapps"/>
</target>
</project>
Nel tag project
viene definito il nome del progetto, la directory di partenza e il target di default. Tutti i path relativi iniziano dalla directory definita. Il target di default viene richiamato automaticamente qualora lo script viene eseguito senza specificare un target.
Il target info
stampa semplicemente un messaggio a video. Il target init
definisce la property tomcat.home che viene utilizzata nello script. Il target compile
compila i file sorgenti contenuti nella directory src e crea la cartella WEB-INF/classes. Per la compilazione viene aggiunto al classpath il file servlet-api.jar contenuto nelle librerie di Tomcat. Il target war
crea il file WAR. Naturalmente questo target implica l'esecuzione del target compile. Il target deploy
copia il file WAR generato nella directory webapp di Tomcat rendendo quindi disponibile l'applicazione.
Per eseguire lo script è necessario aprire una shell e richiamare il comando Ant seguito dal target che si desidera eseguire.