martedì 14 febbraio 2012

Ant esempio utilizzo per Java Project

In questo post vediamo un semplice script Ant che provvede al deploy di un PGM Java in un jar file, stampando a video le proprietà generiche del sistema (JVM,ANT_HOME,Sistema Operativo) e chiedendo prima all'utente se vuole effettuare il deploy o meno; in caso di risposta negativa ant scrive un messaggio di saluto e non procede al deploy (questo solo per vedere un esempio di "if" lato ant).
Il pgm Java è volutamente banale (il classico Hello Word).
Il pgm si trova in un package it.test e si chiama Test.java. Il sorgente è inserito nella nostra base dir dentro la directory src.
Il jar file sarà creato al livello della nostra directory, mentre il .class sarà inserito nella directory build sempre presente a livello della nostra base dir.

Le particolarità di questo script ant sono:

1)  Accesso a variabili di ambiente ( inserendo il nodo <property environment="env"/>) che ci consente poi  di   accedere alla proprietà env direttamente;

2) Utilizzo di proprietà native di ant (disponibili sempre negli script) come ${os.name} per ottenere informazioni sul S.O.  ${ant.java.version} per ottenere la versione di JVM usata, ${user.home} per ottenere la directory user dove di default ant va a cercare ulteriori jar da inserire al classpath oltre a quelli della JVM;

3) Aggiunta di un attributo nel manifest del JAR (in questo caso l'attributo Main-Class) che ci consente di far partire il jar direttamente con java -jar Nome.jar senza specificare l'entry point della classe col main;

4) Gestione della logica condizionale (nel target Opzioni) con l'impostazione di due variabili di uscita (isDeploy e isNotDeploy) che condizionano l'esecuzione dei target di compilazione del sorgente e di creazione del jar file;

Di seguito lo script ant:

<?xml version="1.0" ?>
<project default="main">
<property environment="env"/>
<target name="main" depends="compile,compress,exit">
<echo>Sistema operativo : ${os.name}</echo>
<echo>Versione Java utilizzata: ${ant.java.version}</echo>
<echo>Directory user ${user.home}</echo>
<echo>Ant HOME ${env.ANT_HOME}</echo>
</target>
<target name="compile" depends="Opzioni" if="isDeploy" >
<javac destdir="${basedir}/build" srcdir="${basedir}/src"/>
</target>
<target name="compress" depends="Opzioni" if="isDeploy">
<jar jarfile="Project.jar" basedir="${basedir}/build" includes="**/*.class">
<manifest>
                <attribute name="Main-Class" value="it.test.Test"/>
</manifest>
</jar>
</target>
<target name="Opzioni">
       <input
      message="Si desidera effettuare il deploy ? "
      validargs="y,n"
      addproperty="do.check"
       />
      <condition property="isDeploy">
   <equals arg1="${do.check}" arg2 = "y" />
   </condition>
    <condition property="isNotDeploy">
   <equals arg1="${do.check}" arg2 = "n" />
   </condition>
     </target>

<target name="exit" depends="Opzioni" if="isNotDeploy">
<echo> si e ' scelto di non fare nulla.....</echo>
</target>
</project>


L'output prodotto è il seguente:

C:\proveAnt>ant
Buildfile: C:\proveAnt\build.xml

Opzioni:
    [input] Si desidera effettuare il deploy ?  (y, n)
y

compile:
    [javac] C:\proveAnt\build.xml:11: warning: 'includeantruntime' was not set,
defaulting to build.sysclasspath=last; set to false for repeatable builds

compress:
exit:
main:
     [echo] Sistema operativo : Windows XP
     [echo] Versione Java utilizzata: 1.6
     [echo] Directory user C:\Documents and Settings\sciardone
     [echo] Ant HOME C:\Programmi\apache-ant-1.8.2

BUILD SUCCESSFUL
Total time: 2 seconds

Nessun commento:

Posta un commento