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
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